- 博客(125)
- 资源 (1)
- 收藏
- 关注
原创 RV1126+FFMPEG多路码流监控项目——测试
执行这个命令,启动 nginx 后,程序会持续监听 1935 端口,接收 RV1126 发过来的 H.264 视频码流,把视频数据缓存到服务器内部。前面几章奖这个项目的代码都写完了,现在可以进行编译,放进板子里面测试了,编译烧录步骤我这里就不再赘述了,VI模块内容详细说了。同样新建规则,TCP 1935 端口,放行出站,保证 ffplay 播放器向外拉流不受拦截。,点击「Windows PowerShell」打开,手动切换到 nginx 目录。此时板子的终端,准备好执行命令,开始执行之后,
2026-06-22 02:03:05
226
原创 C++队列的使用
std::queue是 C++ 标准库提供的、只能在,不支持随机访问中间元素,非常适合任务排队、数据缓冲、生产者 - 消费者解耦等场景,本次推流项目中的码流缓存队列,本质就是基于这个数据模型实现的。在实际开发中队列发挥着巨大的作用,比方说多线程数据传输、缓存数据的存储、中间件的设计等等。从上面这张图我们可以看到,队尾入队了三个元素分别是1,2,3。1号数据最早入队、2号数据第二入队、3号数据最后入队。出队的时候,1号最早出队(pop1)、2号排在1号数据后面(pop2)、3号最后出队(pop3)。
2026-06-21 02:40:05
496
原创 RV1126+FFMPEG多路码流监控项目——高低分辨率码流推送流媒体
本章的内容主要是讲解如何通过高低分辨率队列的每一帧数据,并且通过FFMPEG推流器分别传输到高低码流分辨率流媒体服务器,本章节代码在rkmedia_assignment_manage.cpp和rkmedia_data_process.cpp里面。低分辨率编码码流推送的过程和高分辨率编码码流的推送的过程基本上一致,唯一的区别在于分辨率的设置。
2026-06-20 16:53:05
235
原创 FFMPEG——时间戳、时间基、时间转换
时间基与时间戳是 FFmpeg 音视频同步、有序播放的核心机制,也是推流开发中最容易踩坑的环节。所有音视频帧的播放顺序、音画对齐、封装传输,都依赖统一的时间刻度规则与转换逻辑。时间基也称之为时间基准,它代表的是每个刻度是多少秒。比方说:视频帧率是那它的时间刻度是{1,25}。相当于1s内划分出25个等分,也就是每隔1/25秒后显示一帧视频数据。具体的如下图所示:在FFMPEG中时间基准都是用它是的缩小,代表的是分子它是的缩小,代表的是分母。在视频时间基都是以帧率为单位,比方说25帧。FFMPEG就以。
2026-06-19 23:00:58
602
原创 FFMPEG——RTMP协议
传输基础:运行在 TCP 协议之上,面向连接、可靠传输,天然保证数据包不丢失、不乱序,适合公网稳定传输。格式绑定:RTMP 的音视频数据载荷原生承载 FLV Tag 格式数据,二者一一对应,这也是推流必须先把 H.264/AAC 封装成 FLV 的根本原因。协议变体RTMP:标准明文协议,默认 1935 端口,最常用;RTMPS:基于 TLS/SSL 加密的 RTMP,用于安全传输场景;RTMPT:封装在 HTTP 中的 RTMP,用于穿透防火墙。核心能力。
2026-06-19 01:51:04
185
原创 FFMPEG——FLV复合流
FLV 全称是美国公司推出来的一种流媒体协议。FLV流媒体格式的特点是封装过后的音视频数据非常小、并且封装的规范相对更加简单,所以FLV流媒体格式非常适合网络传输。但是FLV格式是Adobe公司的私有协议,所以它支持的网络传输协议比较有限:如RTMP、HTTP-FLV。
2026-06-18 23:19:26
358
原创 FFMPEG推流器——输出模块初始化
上一章了解了FFMPEG的重要结构体,这一章是对输出模块的初始化,输出模块的最大作用是对音视频推流模块进行初始化让其能够正常工作起来,RV1126的码流通过FFMPEG进行推流,输出模块一般由几个步骤。分别由。
2026-06-18 21:54:10
303
原创 FFMPEG推流器——重要结构体
FFmpeg 就是一套免费开源的音视频工具,被称作音视频领域的“瑞士军刀”,普通人能直接敲命令用,程序员能把它嵌进自己软件里调用。能干的事说白了就几类:市面上绝大多数播放器、直播软件、剪辑工具底层都靠它,不用自己从零写音视频处理代码,省事还兼容几乎所有音视频格式。在这个项目里,FFMPEG主要的作用是进行视频推流的功能,就是把RV1126编码的视频码流利用FFMPEG框架推送到流媒体服务器。FFMPEG中有六个比较重要的结构体,分别是AVFormatContext、AVOutputFormat、 AVStr
2026-06-18 12:14:39
350
原创 RV1126+FFMPEG多路码流监控项目——多线程获取高低分辨率码流
在ffmpeg_video_queue.cpp中对数据包结构体进行定义// 自定义视频数据包结构体,用于封装单帧编码后的码流数据// 码流数据存储缓冲区,定义最大缓存长度// 当前帧码流有效数据长度// 帧标记位,区分I关键帧 / P预测帧。
2026-06-17 22:20:48
238
原创 RV1126+FFMPEG多路码流监控项目——硬件模块初始化
以上就依次完成了VI、高分辨率VENC、RGA、低分辨率VENC四大核心硬件模块的配置与初始化,也是本项目视频数据流的前置基础。下面对整个硬件初始化流程、分工与运行逻辑做整体梳理,方便衔接后续多线程读取码流、处理数据与推流的内容。各模块核心分工VI 模块:作为整个项目的数据源头,驱动 CMOS 摄像头采集原始 1920×1080 NV12 格式视频画面,通过硬件缓冲区保障画面连续输出。高分辨率 VENC(通道 0)
2026-06-17 01:53:58
162
原创 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)。
2026-06-16 20:37:21
197
原创 RV1126——获取AAC码流
RV1126的AENC模块是音频编码模块,主要是对AI模块进来的数据进行音频编码压缩处理,并输出对应的音频压缩码流,下面是AENC模块在RV1126里面和AI模块的关系。
2026-06-16 02:23:42
372
原创 RV1126——多线程获取音频AI的pcm数据
头文件作用提供文件操作、内存分配、sleep 系统调用;线程头文件pthread.h:实现后台音频采集子线程;信号头文件signal.h:捕获 Ctrl+C 实现优雅退出;:瑞芯微 RKMedia 多媒体 SDK 总头文件,所有音视频接口依赖此文件。宏定义说明AUDIO_PATH:ALSA 声卡设备节点标识,原代码写default存在适配问题,修改为hw:0,0,匹配你板子arecord -l查询到的;AI_CHN:RKMedia 音频输入通道号,RV1126 单麦克风场景固定使用通道 0。
2026-06-15 22:19:14
173
原创 RV1126——OSD模块和SDL_TTF结合输出H264文件
字体文件fzlth.ttf必须放在程序同级目录,否则字体打开失败;SDL 1.2 无 Alpha 通道、无新版格式接口,只能手动构造;pitch行跨度是水印花屏的核心根源,必须逐行拷贝;RK OSD 位图强制16 字节对齐,对齐函数不可省略;所有、SDL 资源、媒体 Buffer 都必须手动释放。问题:水印区域出现彩色噪点 / 花屏原因:宽高、坐标未做 16 对齐;结构体未memset清零产生脏数据。解决:统一使用函数,所有局部结构体强制清零。问题:文字颜色错乱、重影、变色原因:未做。
2026-06-13 22:32:42
885
原创 RV1126——交叉编译 SDL_TTF库并渲染文字
SDL_TTF 是一款轻量级、跨平台的 TrueType 字体渲染开源库,必须依赖 SDL 基础图形库运行。它底层调用 FreeType2 内核解析.ttf.ttc等主流字体文件,开发者无需手动编写字体点阵、轮廓绘制逻辑,仅调用简单 API 就能快速渲染出不同字号、颜色的文字。程序调用 SDL_TTF 加载自定义字体文件;渲染时间、设备编号、通道名称等文本,生成标准位图数据;将位图数据传入 RV1126 RKMedia OSD 接口,由硬件完成画面叠加。
2026-06-13 15:21:57
358
原创 RV1126——OSD模块
初始化 VI 视频采集通道 → 开启采集;初始化 VENC 编码通道 → 开启编码;调用初始化 OSD 模块;绑定 VI 与 VENC 数据流;启动业务线程:渲染文字 / 图片,生成像素数据;填充BITMAP_S结构体;循环调用刷新 OSD 图层;程序退出:解除绑定 → 销毁 VENC → 关闭 VI。
2026-06-12 23:27:17
331
原创 RV1126——GOP模式调节画面质量
NormalP 普通模式:通用性最强、零延迟、兼容性最好。适合常规室内监控、固定录像、基础预览,是新手开发、基础实验的默认首选。SMARTP 智能模式:监控场景最优解。静态省码率、动态保画质,兼顾清晰度和存储带宽,是商用 IPC 设备的主流方案。TSVC 分层模式:弱网专属。主打网络自适应、抗卡顿,专门用于无线、移动、4G/5G 等不稳定网络环境。RV1126中设置GOP模式的结构体和API1.5 RV1126的GOP属性结构体。
2026-06-10 23:26:38
265
原创 RV1126——视频编码增强模块QP调节
纯 CBR 模式一定要加 QP 限制:不管码率设置多高,都建议配置 MaxQp,防止复杂场景下画质崩塌,一般监控场景 MaxQp 设置在 28~32 之间比较合适;I 帧 QP 区间可以单独调低:I 帧作为关键帧,画质会影响整个 GOP 的画面,建议把 MaxIQp 设置得比普通帧更低,比如普通帧 MaxQp=30,I 帧 MaxIQp=25,保证关键帧的清晰度;根据场景调整 QP 区间:本地录像场景可以把 QP 区间设得更低(MaxQp=25),保证画质;
2026-06-10 18:27:10
493
原创 RV1126——多线程获取高分辨率和低分辨率的H264码流
掌握了嵌入式摄像头高低双分辨率的标准工程架构;理解 RGA 硬件缩放 + 双 VENC 并行编码的核心原理;通过多线程隔离,实现两路码流同时稳定获取、同时保存;这套架构是后续双路 RTSP 推流、双路 MP4 录像、预览 + 录像分离的底层基础。
2026-06-09 11:55:59
168
原创 RV1126——多线程分别获取H264码流和H265码流
RKMedia 框架下,H264、H265 取流逻辑完全通用,仅需修改编码类型参数即可切换;多线程取流是 VENC 码流获取的标准写法,能有效避免主线程阻塞、丢帧问题;H265 压缩率更高,适合存储录像场景;H264 兼容性强,适合直播推流场景;取流后必须释放缓存,是保证编码器长期稳定运行的关键。
2026-06-08 13:53:20
219
原创 RV1136——获取VENC的H264码流
在 RKMedia 架构里,VENC 是负责硬件编码的模块。它会把 VI 采集、RGA 缩放后的图像,自动压缩成 H.264 码流。但有一个关键点:编码出来的 H.264 数据,不能直接在主线程里读,必须开一个独立线程去取。主线程要负责模块初始化、链路管理;取码流是一个阻塞等待的过程;如果不放线程里,会导致整个程序卡住,甚至丢帧。所以这一章的核心就是:初始化 VENC → 绑定 RGA 与 VENC → 开线程循环取 H.264 数据 → 保存文件。
2026-06-06 23:37:54
795
原创 RV1126——视频编码原理
码率控制指的是利用编码中的一些特殊手段控制图像的压缩比例,使其画面质量在不同的场景中保持一个最优的状态。RV1126的码率控制方式,总共分为三种:分别是CBR固定码率控制模式、VBR可变码率控制模式、AVBR码率控制模式。5.2.1 CBR控制码率详解。
2026-06-05 23:58:48
226
原创 RV1126——获取RGA模块的数据
RGA_INFO_S(输入 / 输出图像描述)(单幅图像信息)// 图像格式:NV12/NV21/RGB888等// 裁剪起始X坐标(左上角)// 裁剪起始Y坐标// 有效图像宽// 有效图像高// 行跨度(内存宽度,≥u32Width)// 列跨度(内存高度,≥u32Height)RGA_ATTR_S(创建 RGA 通道入参)// 输入端图像配置(来自VI)// 输出端图像配置(缩放后)// 旋转角度:0/90/180/270。
2026-06-05 15:19:50
559
原创 RV1126——多线程获取VI模块的YUV数据
..这些就是工具包,相当于写作文前准备好笔、纸、橡皮。前面一堆是 C 语言标准工具(文件、线程、信号、睡眠等)是瑞芯微官方提供的摄像头操作工具箱,没有它,就调不了 VI 模块。这三行是固定配置:摄像头在系统里的名字,RV1126 上基本都用这个;PIPE_IDCHN_ID:摄像头通道编号,单摄默认都是 0。一个退出开关。一开始是false(不退出);按Ctrl+C时变成true,程序就知道该停了。主线程:初始化摄像头 → 打开摄像头 → 等你按 Ctrl+C;子线程。
2026-06-04 12:57:28
236
原创 RV1126——YUV原理
不管是做 IPC 摄像头、RV1126 嵌入式音视频开发,还是日常接触视频编码,YUV 都是绕不开的基础知识点。摄像头 Sensor 输出原始画面、VI 采集图像、RGA 图像处理、VENC 编码 H.264/H.265,全程数据都是 YUV 格式。很多初学嵌入式的同学分不清 YUV 和 RGB,搞不懂 444/422/420 区别,本篇用通俗的大白话,从原理、优势、采样规则、实际大小计算、存储分类全方位讲解 YUV。我们熟知的 RGB 依靠红绿蓝三原色混合出各种色彩,而 YUV 把画面拆分成亮度 Y和。
2026-06-03 20:43:01
341
原创 RV1126——音视频开发环境搭建、固件烧录、网络调试、demo运行
在电脑(Ubuntu/x86)上,编译出能在开发板(RV1126/ARM)上运行的程序,这个过程就叫交叉编译。一句话总结:电脑编译 → 板子运行。
2026-06-03 14:15:04
371
原创 FreeRTOS——任务信息查询API
每一个 FreeRTOS 任务都需要定义栈大小、优先级、任务句柄栈大小:单位为字(STM32 下 1 字 = 4 字节),根据任务逻辑复杂度设置,简单任务 50~128 即可;优先级:数值越大优先级越高,IDLE 空闲任务优先级固定为 0;任务句柄:任务的唯一标识,后续所有针对任务的操作(查询、挂起、删除)都需要依靠句柄。全局数组作为缓冲区,存放vTaskList生成的字符串,缓冲区大小建议不低于 500 字节,任务数量多时可适当加大。宏配置优先:使用任务查询类 API 前,务必在。
2026-06-01 00:03:45
398
原创 FreeRTOS——列表与列表项
列表 = 双向循环链列表项 = 链上的节点vListInsert = 按排序值插入uxListRemove = 删除节点vListInsertEnd = 尾部插入(不排序)这就是 FreeRTOS 最底层、最核心的数据结构。
2026-05-30 18:15:20
899
原创 FreeRTOS——中断实验
优先级 0~4:系统关不掉 → 硬实时优先级 5~15:系统可以关 → 弱实时以后写项目就知道了:特别重要的中断,优先级设成 0~4;普通的外设中断,设成 5~15。
2026-05-28 21:44:00
688
原创 FreeRTOS——按键控制任务的挂起和恢复
提前定义好要控制的任务句柄,挂起和恢复都需要用到句柄;单独创建一个低优先级的按键任务,专门处理按键扫描,不干扰业务逻辑;按键扫描必须加双层判断 + 延时消抖,同时等待按键松手,避免长按重复触发;挂起任务用vTaskSuspend(句柄),恢复任务用vTaskResume(句柄),注意任务挂起计数的问题;按键任务里加适当延时,避免频繁扫描占用 CPU 资源。中断初始化一定要在 main 里调用PC13 中断号是中断服务函数名必须是中断里不能有任何延时必须清除中断标志位。
2026-05-27 16:57:40
820
原创 FreeRTOS——静态任务创建与删除
和动态创建任务一样,每个任务都要先确定堆栈大小、运行优先级。但静态模式下,我们需要手动定义两个关键数组和变量:类型数组用来充当任务栈,相当于提前给任务划分好运行时的栈空间;是任务控制块 TCB,系统会在这里记录任务状态、栈指针等核心信息。最后再定义任务句柄和任务函数声明,句柄主要用来后续执行删除、挂起这类操作。这里我设置的优先级:任务 1 (3) > 任务 2 (2) > 开始任务 (1),优先级数值越大,CPU 调度时越优先执行。
2026-05-26 22:32:50
622
原创 FreeRTOS——任务动态创建与删除
本篇博客带大家完成 FreeRTOS多任务创建 + 任务动态删除经典入门实验,非常适合新手理解 RTOS 多任务并发、任务优先级、任务生命周期、vTaskDelete 函数用法。创建三个任务:开始任务、任务1、任务2系统启动后,任务1、任务2同时并发运行,LED0、LED1 每秒翻转一次,串口打印运行信息任务1计数运行5次后,动态删除任务2任务2被删除后彻底停止运行,仅剩任务1独立运行前5秒:两个LED同时闪烁,串口同时打印两个任务运行日志。
2026-05-26 18:30:43
679
原创 STM32——SPI通信
SPI(Serial Peripheral Interface)串行外设接口是一种高速、全双工、同步、主从式的通信总线。串行:数据一位一位传输全双工:发送和接收可以同时进行同步:主机提供统一时钟,收发双方严格同步主从:STM32 一般作为主机,外设作为从机这套 SPI 代码是STM32 最标准、最通用、最稳定的硬件 SPI 主机驱动:✅ 带完整注释,新手能看懂✅ 带超时保护,不卡死✅ 可动态修改速度✅ 支持所有 SPI 外设(OLED、LCD、Flash、传感器)✅ 模式 3 配置,工业最常用。
2026-05-25 12:04:05
449
原创 STM32——显示温湿度
引脚序号引脚名称功能说明1VCC电源正极,接 3.3V/5V2DATA双向通信数据线,连接单片机通用 GPIO 口3GND电源负极,公共地。
2026-05-23 22:36:37
922
原创 STM32——软件IIC显示字符
SIZE=16→ 使用16×8大小的 ASCII 字符(两行高度)不是 16 → 使用6×8大小的 ASCII 字符(一行高度)
2026-05-18 22:10:34
915
原创 STM32——OLED显示图片
很多小伙伴在用 STM32 驱动 0.96 寸 I2C OLED(SSD1306)时,汉字显示没问题,但图片花屏、只显示一小部分、画面错位、完全不显示不懂 SSD1306页寻址存储原理;图片绘制函数循环逻辑写错、页号不刷新、传参混淆「行数」和「页数」。数组开头加const// 128*64 OLED 全屏图片取模数组#endif不懂页寻址,不会逐页刷新坐标;函数循环逻辑错误,固定页号不切换;取模配置不匹配、数组不加 const。
2026-05-11 22:39:05
759
原创 STM32——OLED显示汉字
在使用 STM32 驱动 SSD1306 OLED 时,很多新手都会遇到汉字错位、爱心旋转、图案乱码等问题,而这些问题的根源,往往不是硬件接线,而是。今天我将基于你提供的完整工程,从硬件配置、字模原理、驱动源码到显示函数逐行拆解,带你吃透 16x16 汉字 / 图标显示的本质,让你不仅能写出正确的代码,还能自己定制任意图案,告别 “玄学调参”。
2026-05-11 21:42:32
827
原创 STM32——I2C协议
初学、做项目、怕翻车 → 一律用 软件 IIC熟练、高速通信、不用兼容任意引脚 → 用 硬件 IICSCL 时钟、SDA 数据,一主多从、靠地址区分设备。起始、停止、发字节、应答。软件 IIC:普通 GPIO + 代码模拟时序,简单稳定、引脚随意。硬件 IIC:专用引脚 + 外设自动时序,速度快但有 bug、引脚固定。初学和普通项目优先软件 IIC。
2026-05-08 22:23:30
786
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅