RV1126+FFMPEG多路码流监控项目

一、项目介绍:

本项目采用的是易百纳RV1126开发板和CMOS摄像头,使用的推流框架是FFMPEG开源项目。这个项目的工作流程如下(如上图):通过采集摄像头的VI模块,再通过硬件编码VENC模块进行H264/H265的编码压缩,并把压缩后的数据通过FFMPEG传输到两个流媒体服务器(如同时推送到流媒体服务器:rtmp://xxx.xxx.xx.xxx:1935/live/01和rtmp://xxx.xxx.xx.xxx:1935/live/02)。

1.1用到的东西

  • 硬件:RV1126 开发板 + 普通 CMOS 摄像头 RV1126 是专门做视频监控、音视频处理的嵌入式板子,自带视频采集、编码硬件,不用额外加芯片。
  • 软件工具:FFmpeg(业内最主流的开源音视频工具,核心用来把视频往外推送)

1.2最终实现效果

摄像头实时拍摄画面,同时输出两路不同清晰度的视频流,分别推到两个网络地址(流媒体服务器):

  1. 高清流:1920×1080(1080P)→ 推到地址 rtmp://192.168.1.66:1935/live/01
  2. 标清流:1280×720(720P)→ 推到地址 rtmp://192.168.166:1935/live/02

简单说:一个摄像头,同时传出两种清晰度的直播视频,这就是「多路码流监控」。

1.3学这个能收获什么

核心练 3 个嵌入式 + 音视频必备技能:

  1. 多线程:让多个任务同时跑(采集、处理、推流各干各的,不卡顿)
  2. 队列:临时存放视频数据,防止数据乱序、丢失
  3. FFmpeg 推流:把本地视频通过网络发送出去

二、核心模块通俗讲解(先认识硬件功能模块)

项目里反复提到 VI、VENC、RGA,这三个是 RV1126 自带的硬件单元,不用写复杂算法,调用接口就能用:

  1. VI 模块(视频采集) 作用:专门对接摄像头,把镜头拍到的画面转换成板子能识别的原始视频数据。 类比:相当于人的眼睛,负责 "看见画面"。

  2. VENC 模块(硬件编码器) 原始视频体积非常大,直接传输会卡、耗流量。VENC 会把画面压缩成 H264/H265 格式。 本项目分两路编码器:

    • VENC0:处理 1080P 高清画面
    • VENC1:处理 720P 标清画面 类比:相当于压缩工具,给视频 "瘦身"。
  3. RGA 模块(图像缩放) 作用:修改视频分辨率,本项目专门把 1080P 画面缩小成 720P。 类比:图片缩放工具,把大图改成小图。

三、项目框架思维导图

整个流程一句话总结:采集画面 → 高清编码 → 缩放画面 → 标清编码 → 队列存数据 → FFmpeg 网络推流

下面拆分每一步:

3.1 初始化所有硬件模块(程序启动第一件事)

程序一运行,先执行 init_rkmedia_module_function,一次性把所有硬件启动好:

  1. 启动 VI → 摄像头开始工作
  2. 启动 RGA → 准备好画面缩放功能
  3. 启动两路 VENC 编码器 → 准备好视频压缩功能

3.2 创建两个 "数据仓库"(队列)

队列 = 视频帧临时存放区。视频是一帧一帧的画面,处理速度和推送速度不一定同步,用队列缓存就不会丢数据。

  • HIGH_VIDEO_QUEUE:存放 1080P 编码后的视频帧
  • LOW_VIDEO_QUEUE:存放 720P 编码后的视频帧

3.3 初始化 FFmpeg 推流配置

告诉 FFmpeg:要推几路流、推到哪个网络地址、视频格式是什么,相当于提前设置好 "快递地址" 和 "包裹规格"。

3.4 开启多线程,所有任务并行运行(核心核心!)

多线程 = 同时干多件事。本项目一共创建6 个线程,分工明确,互不干扰:

  1. camera_venc_thread(采集 + 高清编码线程) 从摄像头拿原始画面 → 交给高清 VENC 压缩成 1080P → 存入高清队列。

  2. get_rga_thread(画面缩放线程) 读取原始 1080P 画面 → 用 RGA 缩小为 720P → 传给标清编码器。

  3. low_camera_venc_thread(标清编码线程) 接收缩放后的 720P 画面 → 标清 VENC 压缩 → 存入标清队列。

  4. high_video_push_thread(高清推流线程) 从高清队列取出视频帧 → 调用 FFmpeg → 推送到高清服务器地址。

  5. low_video_push_thread(标清推流线程) 从标清队列取出视频帧 → 调用 FFmpeg → 推送到标清服务器地址。

补充:为什么要用多线程? 如果单线程执行,必须等 "采集→编码→缩放→推流" 一步步做完,画面会严重延迟、卡顿。多线程同时工作,全程流畅。

四、代码文件认识

整套代码是 C编写,后续博客会逐个讲解,先分清大类:

  1. 主程序 :rv1126_ffmpeg_main.cpp 整个项目入口,所有初始化、创建线程的代码都从这里开始执行。

  2. 硬件模块相关 :rkmedia_module_* 系列文件 专门写 VI、VENC、RGA 这些硬件的初始化、调用逻辑。

  3. 数据处理 & 队列 :rkmedia_data_process、rkmedia_container 负责视频帧处理、队列(数据仓库)的增删、存取。

  4. FFmpeg 配置 :rkmedia_ffmpeg_config 所有和推流地址、编码格式、网络参数相关的配置都在这里。

  5. 任务管理 :rkmedia_assignment_manage 统筹所有线程、任务的调度。

  6. 摄像头底层配置 :rv1126_isp_function、sample_common_isp 摄像头图像画质、参数调节相关代码。

相关推荐
Likeadust19 分钟前
门店客流少、曝光弱?视频直播点播EasyDSS音视频平台解锁门店线上拓客新模式
网络·音视频·easydss
voipmaker1 小时前
融合通信调度录音的困局:基于 MediaX 网关实现对讲语音 AI 事件萃取
人工智能·ai·音视频·语音识别·实时音视频·信息与通信·iot
Sayai9 小时前
ComfyUI+混元视频实战:12G 显存跑 13G 模型,5 分钟出片(国产开源,附模型与工作流)
人工智能·aigc·音视频·comfyui·hunyuanvideo·混元视频
ACP广源盛1392462567312 小时前
项目评估记录:4K 视频墙方案调研,GSV9001E @ACP参数与工程问题记录
硬件架构·音视频·硬件工程·视频·国产芯片
AI视频工具指南17 小时前
怎么用 AI 做一两分钟的小故事视频?从结尾倒推故事
人工智能·aigc·音视频
AI视频工具指南18 小时前
AI短剧怎么做?一个矛盾怎样接着讲三集
人工智能·aigc·音视频
酷虎软件18 小时前
视频加字幕怎么制作
java·前端·音视频
码点滴19 小时前
67000 星的开源语音引擎:用 VoiceStudio 搭建本地语音克隆与多语言配音流水线
开源·音视频
开开心心就好20 小时前
手机虚拟化学实验室,混合燃烧都能模拟
jupyter·智能手机·ffmpeg·计算机外设·电脑·音视频·visual studio
VidDown21 小时前
上线三个月后的第一次事故:一个 Django 服务的日志、监控与故障复盘
数据库·python·django·wpf·音视频·视频编解码