P7 RV1126推流项目 —— 写代码前的思路草图

发布时间:2023年12月27日

目录

前言?

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推流项目


01?项目介绍:

本项目是通过 RV1126 采集摄像头、麦克风数据,并通过 H264/H265 视频编码技术和 AAC
音频编码技术进行压缩合成复合流,并推送到流媒体服务器上面。


02 项目框图:

上面这个图是整个项目的总体流程图,这个项目的最核心有三个:

  1. 利用 RV1126 的 API 对 CMOS 摄像头进行采集+编码,并存放到视频编码队列
  2. 利用 RV1126 的 API 对麦克风进行采集+音频编码,并存放到音频编码队列
  3. 利用 FFMPEG 的 API 把视频包和音频包进行时间戳比较,分别从视频队列和音频队里面取出对应的数据并进行复合流的合成,然后推流到流媒体服务器.

03?模块设计思路?

3.1.rv1126_ffmpeg_main.cpp(主模块代码):

这个模块的主要功能是,初始化所有东西,也是这个项目的入口,包括:ffmpeg 合成模块的初始化;音视频编码队列的初始化、RV1126VI、VENC、AI、AENC 模块的初始化;并启动线程进行音视频推流

3.2.rkmedia_assignment_manage.cpp(RKMEDIA 任务管理模块)?

这个模块的主要功能是管理每一个 RV1126 的任务。

目前主要的任务是创建三个线程,分别是:视频编码线程
(camera_venc_thread) 、音频编码线程(audio_anec_thread) 、音视频合成推流线程
(push_server_thread)

3.3. rkmedia_data_process.cpp(RV1126 数据处理模块):

这个源文件的主要功能是三个线
程 的 具 体 实 现 过 程 , 包 括 : 视 频 编 码 线 程 (camera_venc_thread) 、 音 频 编 码 线 程
(audio_aenc_thread)、音视频合成并推流的线程(push_server_thread)。


3.4. rkmedia_module_function.cpp(RV1126 功能模块的开发):

在这个源文件里面,主要做
了以下功能,包括:VI 模块的初始化、VENC 模块初始化、AI 模块初始化、AENC 模
块的初始化。初始化上述功能后,还要绑定各种设备节点,为推流做准备。


3.5. rkmedia_module.cpp(RV1126 任务功能模块):

这个代码的主要功能是实现 3.4 里面的
具体功能。包括:VI 模块的初始化、VENC 模块初始化、AI 模块初始化、AENC 模块
的初始化。


3.6.rkmedia_container.cpp(RV1126 VI、AI、VENC、AENC 容器管理模块)

这个代码的主
要功能是保存 VI 初始化和 AI 初始化的设备节点,供多线程使用。

3.7.rkmedia_ffmpeg_config.cpp(FFMPEG 合成模块):

ffmpeg 合成模块的具体实现,包括
初始化 ffmpeg 复合器、流地址初始化等等。

3.8. ffmpeg_video_queue.cpp(视频编码队列的实现):

这个源文件主要是实现视频编码队列
的管理,包括对视频队列的创建、添加、删除等等。


3.9. ffmpeg_audio_queue.cpp(音频编码队列的实现):

这个源文件主要是实现视频编码队列
的管理,包括对视频队列的创建、添加、删除等等。
?

文章来源:https://blog.csdn.net/weixin_73901182/article/details/135232498
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。