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

发布于:2025-05-25 ⋅ 阅读:(17) ⋅ 点赞:(0)

一.项目介绍:

本项目采用的是易百纳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多路码流推流项目的代码源文件,后面基本上围绕着上图的源代码进行讲解,具体的后面的课程会详细说到


网站公告

今日签到

点亮在社区的每一天
去签到