# rv126+ffmpeg推流项目 **Repository Path**: x-lan/rv126-ffmpeg-streaming-project ## Basic Information - **Project Name**: rv126+ffmpeg推流项目 - **Description**: 1、项目介绍 此项目是利用瑞芯微Rv1126的SoC 上 VI 模块和 AI 模块分别采集摄像头和麦克风上的数据,并通过 SoC 上的硬件 VENC 模块和硬件 AENC 模块通过视频 h264 音频 AAC 硬件编码,并存放到视频、音频编码队列里面,ffmpeg 再从编码队列模块上获得视频和音频数据进行音视频同步后复合成 ts 流,最后推送到rtsp流媒体服务器。 - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 8 - **Forks**: 2 - **Created**: 2025-01-22 - **Last Updated**: 2025-10-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # rv126+ffmpeg推流项目 #### 介绍 1、项目介绍 此项目是利用瑞芯微Rv1126的SoC 上 VI 模块和 AI 模块分别采集摄像头和麦克风上的数据,并通过 SoC 上的硬件 VENC 模块和硬件 AENC 模块通过视频 h264 音频 AAC 硬件编码,并存放到视频、音频编码队列里面,ffmpeg 再从编码队列模块上获得视频和音频数据进行音视频同步后复合成 ts 流,最后推送到rtmp流媒体服务器。 ​ 项目中使用的SDK是RKmedia的一种媒体处理方案,该SDK支持应用软件的快速开发,该平台主要支持以下功能: 音视频输入输出和编解码、RGA视频处理(包括旋转、缩放、裁剪)、移动侦测、遮挡侦测、视频合成、视频封装VI(输入视频捕获)、VENC(H.265/H.264/JPEG/MJPEG 编码)、VDEC(H.265/H.264/JPEG、MJPEG 解码)、VO(视频输出显示)、RGA视频处理(包括旋转、缩 放、裁剪)、AI(音频采集)、AO(音频输出)、AENC(音频编码)、ADEC(音频解码)、MD(移 动侦测)、OD(遮挡侦测)、VMIX(视频合成)、MUXER(视频封装)。 #### 软件架构 #### 1.音视频推流项目的讲解 1. 项目介绍 本项目通过 **RV1126** 采集摄像头和麦克风数据,采用 **H.264****/****H.265** 视频编码技术和 **AAC** 音频编码技术进行压缩和合成复合流,然后推送到流媒体服务器。 1. 项目框图 1. ![image-20250123205547578](C:\Users\yu\AppData\Roaming\Typora\typora-user-images\image-20250123205547578.png) 下图展示了整个项目的总体流程图,核心部分包括: 暂时无法在飞书文档外展示此内容 #### 2.1 视频采集与编码 - 使用 **RV1126** 的 API 对 **CMOS 摄像头** 进行采集,并进行 **H.264****/****H.265** 编码。 - 编码后的视频数据存放到 **视频编码队列**。 #### 2.2 音频采集与编码 - 使用 **RV1126** 的 API 对 **麦克风** 进行采集,并进行 **AAC** 编码。 - 编码后的音频数据存放到 **音频编码队列**。 #### 2.3 音视频流合成与推流 - 利用 **FFmpeg** 的 API,对视频和音频数据进行 **时间戳对齐**。 - 从视频队列和音频队列中分别取出数据,合成复合流,并推送到流媒体服务器。 1. 每个源代码模块的讲解 #### 3.1 `rv1126_ffmpeg_main.cpp` (主模块代码) - 该模块的主要功能是 **初始化所有模块**,包括: - 初始化 **FFmpeg 合成模块**。 - 初始化 **音视频编码队列**。 - 初始化 **RV1126** **VI****、VENC、****AI****、AENC** 模块。 - 启动线程进行音视频推流。 #### 3.2 `rkmedia_assignment_manage.cpp` (任务管理模块) - 管理 RV1126 上的各个任务。主要任务是创建并管理三个线程: - **视频编码线程** (`camera_venc_thread`)。 - **音频编码线程** (`audio_aenc_thread`)。 - **音视频合成推流线程** (`push_server_thread`)。 #### 3.3 `rkmedia_data_process.cpp` (数据处理模块) - 实现了三个线程的具体功能: - **视频编码线程**:处理视频编码和数据存储。 - **音频编码线程**:处理音频编码和数据存储。 - **音视频合成并推流线程**:将音视频数据进行合成并推送到服务器。 #### 3.4 `rkmedia_module_function.cpp` (功能模块开发) - 包含以下功能的实现: - **VI****模块** 初始化。 - **VENC模块** 初始化。 - **AI****模块** 初始化。 - **AENC模块** 初始化。 - 初始化后绑定设备节点,为推流做准备。 #### 3.5 `rkmedia_module.cpp` (任务功能模块) - 实现了 **3.4** 中的具体功能: - 初始化 **VI****模块**、**VENC模块**、**AI****模块**、**AENC模块**。 #### 3.6 `rkmedia_container.cpp` (容器管理模块) - 主要功能是保存 **VI** 和 **AI** 初始化的设备节点,供多线程使用。 #### 3.7 `rkmedia_ffmpeg_config.cpp` (FFmpeg合成模块) - 该模块实现了 FFmpeg 合成模块的初始化: - 初始化 **FFmpeg 复合器**。 - 配置 **流地址** 初始化。 #### 3.8 `ffmpeg_video_queue.cpp` (视频编码队列实现) - 负责管理 **视频编码队列**,包括: - 视频队列的创建、添加、删除等操作。 #### 3.9 `ffmpeg_audio_queue.cpp` (音频编码队列实现) - 负责管理 **音频编码队列**,包括: - 音频队列的创建、添加、删除等操作。 #### 3.10 `rv1126_isp_function.cpp` (ISP功能模块) - 实现了 **RV1126** **ISP****模块** 的功能初始化 #### 教程 1. [学习嵌入式的小羊~-CSDN博客](https://blog.csdn.net/weixin_49529507?type=blog) #### 使用说明 1. 前期准备:环境的配置 2. 依赖库要交叉编译,编译还需注意依赖的库对应的头文件(注意是绝对路径还是相对路径)Rv1126_lib、arm_libx264、arm_libx265、arm_libsrt、arm32_ffmpeg_srt、arm_openssl 3. Ubuntu搭建SRT或者RTMP服务器、Windows搭建推流服务器