当前位置: 首页 > news >正文

02-Media-9-video_encoder.py 使用视频编码器(VENC)来捕获并编码视频,保存在TF卡中的示例程序

video_encoder.py 使用视频编码器(VENC)来捕获并编码视频,保存在TF卡中的示例程序。可以通过调用这些 API 进行视频编码,生成不同分辨率和编码格式的码流。VENC 模块需与相机模块结合使用以实现编码功能。

程序包含两个主要函数:vi_bind_venc_test 和 stream_venc_test

vi_bind_venc_test

通过直接绑定摄像头和视频编码器(VENC)来捕获并编码视频。

步骤:

  1. 根据文件后缀名确定编码格式(H.264或H.265)。

  2. 初始化摄像头传感器,设置输出图像的大小和格式(YUV420SP)。

  3. 实例化编码器,并设置输出缓冲区。

  4. 使用MediaManager将摄像头的输出直接绑定到编码器的输入。

  5. 初始化MediaManager。

  6. 根据编码格式设置编码器通道属性。

  7. 创建编码器并启动。

  8. 启动摄像头。

  9. 循环获取编码后的数据流并写入文件,直到达到200帧,为了方便演示,这里调整成了1000。

  10. 清理资源:停止摄像头、解除绑定、停止编码器、销毁编码器、释放MediaManager资源。

stream_venc_test

通过手动获取摄像头帧并发送到编码器进行编码。

步骤:

  1. 与vi_bind_venc_test类似,设置编码格式、初始化传感器和编码器。

  2. 但是,这里没有直接绑定,而是手动从摄像头获取每一帧(通过sensor.snapshot),然后构造帧信息(frame_info)并发送给编码器(SendFrame)。

  3. 然后获取编码后的流并写入文件。

  4. 注意:在手动发送帧的模式下,需要计算YUV420SP格式的UV平面的物理地址,这里根据不同的分辨率进行了不同的偏移计算。

注意:

  • 程序需要SD卡来存储编码后的文件。

  • 两个函数的主要区别在于数据流的传递方式:一个是直接绑定,另一个是手动获取和发送帧。

  • 直接绑定方式效率更高,因为不需要Python代码介入每一帧的传递;而手动方式则更灵活,可以在发送前对帧进行处理。

主函数

if __name__ == "__main__":
    os.exitpoint(os.EXITPOINT_ENABLE)
    #vi_bind_venc_test("/data/examples/test.264",800,480)  # vi绑定venc示例
    #vi_bind_venc_test("/data/examples/test.265",800,480)  # vi绑定venc示例
    #stream_venc_test("/data/examples/test.264",800,480)  # venc编码数据流示例
    stream_venc_test("/data/examples/test.265",800,480)  # venc编码数据流示例
 

为了演示程序功能,分别将 vi

http://www.dtcms.com/a/390447.html

相关文章:

  • Lighthouse安全组自动化审计与加固:基于MCP协议的智能运维实践
  • PHP基础-数据类型(第九天)
  • jQuery中的函数与其返回结果
  • 自动化机器学习框架NexusCore1.0稳定版文档概述
  • 五传输层TCPUDP-思考题-停止等待-ARQ-滑动窗口
  • 使用Azure OpenAI Realtime模型实现语音助理
  • 【智能系统项目开发与学习记录】LinuxUbuntuROS2 零基础学习笔记(小白友好版)
  • Python5-线性回归
  • Windows 定时任务设置、批处理(.bat)命令详解和通过conda虚拟环境定时运行Python程序
  • 无人机图传:让画面直达掌心的传输艺术
  • Django HttpRequest 对象的常用属性
  • 常见的 2 中缓存
  • Python基于Django的微博舆情可视化系统 关键词/用户ID/评论分析 大数据项目(建议收藏)✅
  • 四大访问控制模型:OBAC、RBAC、TBAC与ABAC的对比与应用
  • 如何使用AI IDE书写Vue3数据可视化大屏项目
  • React 类名控制工具库ClassName 简化类写法 条件控制 样式处理
  • 【MySQL】用户和权限管理
  • STM32项目分享:游泳馆闸机计费管理系统设计
  • 《C++进阶之STL》【unordered_set/unordered_map 模拟实现】
  • LLM中如何添加special_token,并且尽可能保持原模型的训练效果
  • [x-cmd] 使用系统包管理器安装 x-cmd
  • 亮数据MCP结合Dify:构建自动化视频数据抓取与智能分析工作流的深度实践
  • 革新交互体验,开启未来智慧生活 —— OPE.AI 多语言多模态AI产品
  • 生活琐记(2)
  • 一文读懂HTTP 1.1/2.0/3.0:从原理到应用的通俗解析
  • JavaStream用法全解析
  • 在日常开发中实现异常处理和空值处理的最佳实践
  • openstack port binding failure (by quqi99)
  • leetcode 3484. 设计电子表格 中等
  • Docker+cpolar 实战:打造灵活可控的远程办公系统