目录
前言
01 项目介绍:
02 项目框图:
03 模块设计思路
3.1.rv1126_ffmpeg_main.cpp(主模块代码):
3.2.rkmedia_assignment_manage.cpp(RKMEDIA 任务管理模块)
3.3. rkmedia_data_process.cpp(RV1126 数据处理模块):
3.4. rkmedia_module_function.cpp(RV1126 功能模块的开发):
3.5. rkmedia_module.cpp(RV1126 任务功能模块):
3.6.rkmedia_container.cpp(RV1126 VI、AI、VENC、AENC 容器管理模块)
3.7.rkmedia_ffmpeg_config.cpp(FFMPEG 合成模块):
3.8. ffmpeg_video_queue.cpp(视频编码队列的实现):
3.9. ffmpeg_audio_queue.cpp(音频编码队列的实现):
从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板
个人主页:@ChenPi
推荐专栏1: 《C++_@ChenPi的博客-CSDN博客》✨✨✨
推荐专栏2: 《Linux C应用编程(概念类)_@ChenPi的博客-CSDN博客》✨✨✨
推荐专栏3:《嵌入式音视频_@ChenPi的博客-CSDN博客》
本篇简介 :这章开始做一个项目,RV1126通过摄像头和咪头获取音视频数据,然后通过 ffmpeg合成ffmpeg推流到流媒体服务器上
RV1126+FFMPEG推流项目
本项目是通过 RV1126 采集摄像头、麦克风数据,并通过 H264/H265 视频编码技术和 AAC
音频编码技术进行压缩合成复合流,并推送到流媒体服务器上面。
上面这个图是整个项目的总体流程图,这个项目的最核心有三个:
- 利用 RV1126 的 API 对 CMOS 摄像头进行采集+编码,并存放到视频编码队列
- 利用 RV1126 的 API 对麦克风进行采集+音频编码,并存放到音频编码队列
- 利用 FFMPEG 的 API 把视频包和音频包进行时间戳比较,分别从视频队列和音频队里面取出对应的数据并进行复合流的合成,然后推流到流媒体服务器.
这个模块的主要功能是,初始化所有东西,也是这个项目的入口,包括:ffmpeg 合成模块的初始化;音视频编码队列的初始化、RV1126VI、VENC、AI、AENC 模块的初始化;并启动线程进行音视频推流
这个模块的主要功能是管理每一个 RV1126 的任务。
目前主要的任务是创建三个线程,分别是:视频编码线程
(camera_venc_thread) 、音频编码线程(audio_anec_thread) 、音视频合成推流线程
(push_server_thread)
这个源文件的主要功能是三个线
程 的 具 体 实 现 过 程 , 包 括 : 视 频 编 码 线 程 (camera_venc_thread) 、 音 频 编 码 线 程
(audio_aenc_thread)、音视频合成并推流的线程(push_server_thread)。
在这个源文件里面,主要做
了以下功能,包括:VI 模块的初始化、VENC 模块初始化、AI 模块初始化、AENC 模
块的初始化。初始化上述功能后,还要绑定各种设备节点,为推流做准备。
这个代码的主要功能是实现 3.4 里面的
具体功能。包括:VI 模块的初始化、VENC 模块初始化、AI 模块初始化、AENC 模块
的初始化。
这个代码的主
要功能是保存 VI 初始化和 AI 初始化的设备节点,供多线程使用。
ffmpeg 合成模块的具体实现,包括
初始化 ffmpeg 复合器、流地址初始化等等。
这个源文件主要是实现视频编码队列
的管理,包括对视频队列的创建、添加、删除等等。
这个源文件主要是实现视频编码队列
的管理,包括对视频队列的创建、添加、删除等等。