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

RV1126+FFMPEG多路码流监控项目大体讲解

一.项目介绍:

本项目采用的是易百纳RV1126开发板和CMOS摄像头,使用的推流框架是FFMPEG开源项目。这个项目的工作流程如下(如上图):通过采集摄像头的VI模块,再通过硬件编码VENC模块进行H264/H265的编码压缩,并把压缩后的数据通过FFMPEG传输到两个流媒体服务器(如同时推送到流媒体服务器:rtmp://xxx.xxx.xx.xxx:1935/live/01和rtmp://xxx.xxx.xx.xxx:1935/live/02)。这个项目我们可以学习到:多线程,队列,FFMPEG音视频数据传输等重要知识。

二.项目框架思维导图

上面是整个项目思维导图可以看出来,这个项目的main函数是整个项目的入口函数。在这里入口函数里面,需要做四个比较重要的步骤:

1.分别是rkmedia组件和功能的初始化

2.初始化高分辨率队列HIGH_VIDEO_QUEUE

3.初始化低分辨率队列LOW_VIDEO_QUEUE

4.init_rv1126_first_assignment开启RV1126的推流任务。

2.1. init_rkmedia_module_function讲解:

这个函数主要是做RKMEDIA的组件初始化,组件包括:

VI模块的初始化

高分辨率VENC模块的初始化

低分辨率VENC模块的初始化

RGA模块初始化。

2.1.1. VI模块初始化:初始化摄像头模块让其摄像头模块能够正常工作,具体的VI模块初始化在rkmedia_vi_init里面。

2.1.2. RGA模块的初始化:RGA主要是对VI模块的数据进行缩放操作,把1920 * 1080的视频数据转换成1280 * 720的视频数据。

2.1.3. VENC模块初始化(分别是高、低分辨率)初始化高、低分辨率VENC硬件编码器,这里的编码器主要针对的是1920 * 1080和1280 * 720两种分辨率,具体的高分辨率VENC模块初始化在rkmedia_venc_init里面。

2.2. 高分辨率队列的初始化HIGH_VIDEO_QUEUE

初始化搞分辨率编码数据队列,这个队列主要是存储1920 * 1080编码的视频数据
2.3. 低分辨率队列的初始化LOW_VIDEO_QUEUE

初始化搞分辨率编码数据队列,这个队列主要是存储1280* 720编码的视频数据

2.4. init_rv1126_first_assignment启动RV1126推流任务讲解:

这个函数主要进行多路码流推流的业务实现,这里面包含了:

init_rkmedia_ffmpeg_context分别初始化高分辨率的ffmpeg推流器和低分辨率的ffmpeg推流器

创建camera_venc_thread线程

创建get_rga_thread线程

创建low_camera_venc_thread线程

创建high_video_push_thread线程

创建low_video_push_thread线程

2.4.1. init_rkmedia_ffmpeg_context初始化高分辨率和低分辨率的推流器:

在这个函数里面主要是对FFMPEG推流器参数进行设置,它需要对高分辨率(1920 * 1080)和低分辨率(1280 * 720)的FFMPEG推流器进行初始化。

2.4.2. 创建camera_venc_thread线程

camera_venc_thread线程最重要的作用是编码1920 * 1080的编码视频数据流并且入到HIGH_VIDEO_QUEUE队列

2.4.3. 创建get_rga_thread线程

get_rga_thread线程最重要的作用是处理1920 * 1080的摄像头数据,把它的分辨率降低到1280 * 720,并且把1280 * 720的原始码流传输到低分辨率(1280 * 720)的编码器

2.4.4. 创建low_camera_venc_thread线程

low_camera_venc_thread线程最重要的作用是获取分辨率1280 * 720的编码数据,并且入到LOW_VIDEO_QUEU队列

2.4.5. 创建high_video_push_thread线程

high_video_push_thread线程作用是从HIGH_VIDEO_QUEUE队里取出每一帧1920*1080的视频编码数据,然后利用FFMPEG的推流到对应的流媒体服务器

2.4.6. 创建low_video_push_thread线程

low_video_push_thread线程作用是从LOW_VIDEO_QUEUE队里取出每一帧1280*720的视频编码数据,然后利用FFMPEG的推流到对应的流媒体服务器

项目代码源文件截图

上图是整个RV1126多路码流推流项目的代码源文件,后面基本上围绕着上图的源代码进行讲解,具体的后面的课程会详细说到

http://www.xdnf.cn/news/8749.html

相关文章:

  • 【软件测试】第三章·软件测试基本方法(缺陷模式、模型、形式化测试方法)
  • 关键点翻转 数据增强踩坑
  • C++性能相关的部分内容
  • 数据类型与运算符
  • 6.3.1图的广度优先遍历
  • 第一课:医学影像研究的科学思维与问题提出
  • js实现音频的录制
  • Vue 样式不一致问题全面分析与解决方案
  • 专业学习|经济学与管理学常用分析工具详解
  • 【人工智能】微调秘籍:解锁AI大模型的定制化魔法
  • python装饰器的简单理解
  • (2)-玩转Fiddler抓包-再识Fiddler
  • 天地图实景三维数据分享(江苏)
  • 【iOS】内存分区
  • 第2周 PINN核心技术揭秘: 如何用神经网络求解偏微分方程
  • 消息中间件之kafka
  • WSL 下面 Buildroot + QEMU 环境记录一下
  • [特殊字符] 使用增量同步+MQ机制将用户数据同步到Elasticsearch
  • Linux(6)——第一个小程序(进度条)
  • LeetCode 2942.查找包含给定字符的单词:使用库函数完成
  • 台式机安装新的固态硬盘后无显示
  • 【C语言练习】060. 使用指针操作字符串
  • Kotlin全栈工程师转型路径
  • Vue-创建应用/挂载应用/根组件模版-.vue单文件/应用配置
  • Cesium中根据不同条件设置3D Tiles样式
  • 【VBA 中GetOpenFilename】常用友好的人机交互文件全路径选择模式
  • 计算机视觉与深度学习 | 基于 YOLOv8 + BeautyGAN + CodeFormer + Face Parsing 实现简单的人脸美颜
  • 【来自纳米AI-大模型】ubuntu 24.04 登陆界面分辨率太高,内容显示得特别小 问题解决方案(亲测有效)
  • lua脚本学习笔记1:Vscode添加lua环境_lua基本语法
  • HarmonyOS赋能套件介绍