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

目录

前言 

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(音频编码队列的实现):

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/272354.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详解IDEA git 版本回滚

作者简介 目录 1.git分区 2.未commit,进行回滚 3.commit未push,进行回滚 3.1.undo commit 3.2.reset 4.已commit&push,进行回滚 1.git分区 git的版本回滚其实就是回滚不同的分区,所以在聊git回滚之前我们有必要简单了解…

linux(centos)相关

文件架构: 用户组 查看用户组中的用户! 用户 切换用户:su 提高用户权限命令:sudo 进程状态命令:top 杀死进程:kill 关机命令:shutdown 重启命令:reboot 时间同步 目录命令 ls pwd rm mv …

git中的smart checkout和force checkout

切换分支时出现了这个问题: 这是因为shiyan01分支修改了代码,但是没有commit, 所以在切换到test分支的时候弹出这个窗口 一、smart checkout(智能签出) 会把shiyan01分支的改动内容带到test分支。合并处理后的内容就变成了test分支的内容,而shiyan01分支的改动会被…

EternalBlue【永恒之蓝】漏洞详解(复现、演示、远程、后门、入侵、防御)内容丰富-深入剖析漏洞原理-漏洞成因-以及报错解决方法-值得收藏!

漏洞背景: 1.何为永恒之蓝? 永恒之蓝(Eternal Blue)爆发于2017年4月14日晚,是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限,以此来控制被入侵的计算机。甚至于2017年5月12日, 不法分子…

yolov7添加FPPI评价指标

学术上目标检测大多用mAP去评价一个模型的好坏,mAP用来作为比较模型的指标是挺好的,不过有个问题就是不够直观,比如mAP0.9到底代表什么呢?平均一个图会误检几个呢?该取什么阈值呢?mAP说明不了,所…

获取android签名

1、安装安卓模拟器,比如MuMu模拟器; 2、打包需要签名的apk,记住包名,比如org.ungleyou.uy,后面签名用得着; 3、下载签名工具,Gen_Signature_Android.apk: http://dlied5.qq.com/msdk/Gen_Sig…

【力扣题解】P101-对称二叉树-Java题解

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P101-对称二叉树-Java题解🌏题目描述💡题解🌏总结…

揭秘Pod状态与生命周期管理的秘密(上)

写在前面 前几篇文章中主要分享了k8s的几种控制器,本文将着重分享一下k8s最小的创建和部署单位pod的状态与生命周期管理。 点击 这里 可以查看所有相关文章。 Pod 概览 Pod 是 kubernetes 中你可以创建和部署的最小也是最简的单位。Pod 代表着集群中运行的进程。…

C# LINQ

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第22章《LINQ》 二、LINQ to XML 我们可以通过LINQ to XML来创造xml文件 如下示例&#xff0c;我们用LINQ to XML来创造。 <Books><CSharp Time"2019"><book>C# 入门经典</book><…

Quadratic Assignment Problem 二次分配问题

1 问题定义 二次分配问题&#xff08;Quadratic Assignment Problem&#xff0c;QAP&#xff09;是一种组合优化问题&#xff0c;涉及确定将设施分配到位置的最优方案。它的目标是找到最佳分配&#xff0c;以最小化设施对之间的总成本或距离&#xff0c;考虑到它们之间的相互作…

枚举(蓝桥杯备赛系列)acwing版

枚举 前言 hello&#xff0c;大家好&#xff0c;前面一段时间已经是把acwing Linux基础课讲完了&#xff0c;其实那些内容完全可以带领小白入门Linux我说过如果有人留言要Linux和Windows server 配置DNS Web ftp 的内容我就做一期&#xff0c;但是没人留言我也就先不自作多情了…

SpringSecurity6 | 退出登录后的跳转

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringSecurity6 ✨特色专栏: MySQL学习 🥭本文内容: SpringSecurity6 | 登录失败后的JSON处理 📚个人知识库: Leo知识库,…

联想发布天禧AI生态四端一体战略,聚焦智能体小程序开发

12月26日&#xff0c;2023联想天禧AI生态伙伴大会在北京正式召开&#xff0c;联想与英特尔、百度、网易有道等头部企业、400余家行业开发者和媒体齐聚一堂&#xff0c;以“AI生态 共赢未来”为主题&#xff0c;共同探讨未来AI生态发展及应用。联想集团副总裁、中国区消费业务群…

如何优化SEO的网站架构

通过优先考虑网站架构来提升你的SEO游戏–这是经常被忽视的有机性能的动力源。了解为什么清晰的结构至关重要&#xff0c;并获得对 SEO 友好的网站的提示。 当人们谈论高优先级的SEO活动时&#xff0c;他们通常会指出关键词研究、内容规划和链接建设等关键领域。 网站架构很少…

Text to image论文精读 TISE (Text-to-Image Synthesis Evaluation):用于文本到图像合成的评估度量工具包

TISE (Text-to-Image Synthesis Evaluation)是一款用于评估文本生成图像的Python评估工具箱。文章由Tan M. Dinh, Rang Nguyen, and Binh-Son Hua等人发表。 其以统一的方式促进、倡导公平的评估度量&#xff0c;并为未来的文本到图像综合研究提供可重复的结果。 文章链接&am…

医院手术麻醉系统源码,基于PHP、 js 、mysql、laravel、vue2技术开发,实现患者数据的自动采集和医疗文书自动生成

手麻系统作为医院信息化系统的一环&#xff0c;由监护设备数据采集系统和麻醉信息管理系统两个子部分组成。手麻信息系统覆盖了患者术前、术中、术后的手术过程&#xff0c;可以实现麻醉信息的电子化和手术麻醉全过程动态跟踪。 以服务围术期临床业务工作的开展为核心&#xf…

Android Studio问题解决:java.lang.NoSuchMethodException

文章目录 一、遇到问题二、分析与思考三、解决问题 一、遇到问题 java.lang.NoSuchMethodException: com.zkteco.android.biometric.b.a.ajni方法调用不到 二、分析与思考 新建了一个最简单的demo发现问题依旧 三、解决问题 通过交叉对比&#xff0c;最后发现是minifyEnable…

数据结构思维导图

数据结构思维导图&#xff0c;目前先写这些&#xff0c;后续有更新会继续。 1 数据结构思维导图

redis 从0到1完整学习 (七):ZipList 数据结构

文章目录 1. 引言2. redis 源码下载3. zipList 数据结构3.1 整体3.2 entry 数据结构分析3.3 连锁更新 4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&am…

让马达转动起来(motor)

代码&#xff1a; #include "reg51.h"sbit P2_0 P2^0; sbit P2_7 P2^7;void main(){while(1){P2_0 1;P2_7 0;} } 仿真&#xff1a; 介绍&#xff1a; 当2.0和2.7端口均为低电平或高电平时&#xff0c;马达保持不转动&#xff1b; 当2.0和2.7端口分别为高电平和…