多路RTSP流解码:最高可支持12路视频编解码

RK3399/RK3328具有强大的视频编解码能力,Soc集成的硬件视频编解码器VPU,能同时处理多路视频的编解码,Soc集成的图形加速引擎RGA, 可以高效地处理图形缩放、旋转、颜色空间转换等操作。结合VPU和RGA,可以高效地实现视频流的解码和后处理,作为第三方应用处理的数据源。

 

调用API

      Rockchip开发的mpp库,提供了非常易于使用API,通过各种不同的控制项,可以适应多种不同场景的视频编解码应用。

 

硬件准备
 
      RK3399平台:AIO-3399C主板 + 12路摄像头

 

 RK3328平台:RK3328行业主板 + 6路摄像头

 

 

运行Demo


      Firefly在RK3399和RK3328 Ubuntu平台上, 针对目前最常见的场景,提供了一个多路RTSP流解码的Demo,Demo支持在RK3399平台上, 同时解12路H264/H265 RTSP,测试流帧率为25fps,无丢帧,低延时,CPU占用率较低(基本只用于RTSP流接收和封包)。在RK3328平台上,同时能解6路H264/H265 RTSP。

 

运行过程

      Demo中,MPP解码->图像后处理->显示整个流程中,VPU和RGA都是直接访问内存物理地址,整个过程零内存拷贝,效率很高。处理后的数据,通过libdrm接口,直接送往显示接口输出。

 

      Demo对解码后的图像输出数据,只做了显示处理,如果在实际应用中需要对图像做处理,可能会导致帧率下降。

 

演示效果
 
    运行时效果图如下:

 

 

实时帧率

实时帧率计算结果如下:

安装方法

Demo运行在RK3399 或 RK3328 Ubuntu 18.04平台上。

 
1. 确认系统中存在 /dev/rga 设备节点。 如果没有此节点, 请参考wiki更新最新的固件。
2. 安装:
 
1
2
$ sudo apt update   
$ sudo apt install firefly-multi-rtsp

  

3.根据实际环境,修改配置文件。 参照下一节配置参数。
4. 运行:
1
$ sudo test_ff_rtsp_dec

  

5. 退出:
 
运行过程中,按Enter键,退出Demo, 由于退出时需要关闭多路rtsp流,所以退出时需要稍作等待。
 
配置参数

Demo中提供了一个配置文件config.json,用于配置demo的运行环境。

配置文件位于/etc/ff_rtsp_dec/config.json ,json格式。(注意不要在config.json中添加注释,否则可能会导致json解析出错)

 
主要配置项如下
 
基础参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
"basepara" : {
    "dri_path" : "/dev/dri/card0"//不要修改
     
    "prefer_monitor_w" : 1920,
    "prefer_monitor_h" : 1080,
     
    "code_type" : "H265", //rtsp流编码类型,H264/H265
     "line_count" : 12,  //rtsp流数量
      
     "output_w" : 480,  //每一路解码后的输出size.
     "output_h" : 360,
      
     "rotate" : 0 //旋转   未使用
      
     },

  

其中prefer_monitor_w 和 prefer_monitor_h是配置外接显示设备的分辨率。
 
1. 配置外接显示设备的分辨率,仅在显示设备支持多种分辨率(如HDMI、DP等显示器)时有效,如果显示设备支持该分辨率,则将显示设备设置为该分辨率。
 
2. LVDS, MIPI屏该配置无效(但仍需保留该配置项,只是配置值无效),因为LCD支持一种分辨率。
 
3. 配置此参数后,Demo将显示设备设置为对应的分辨率,然后计算该分辨率是否能够完整显示所有路RTSP解码后的输出。如果不能显示,应该减小rtsp流数量,或者减小输出尺寸。
1
2
3
line_h = prefer_monitor_w / output_w;
line_v = prefer_monitor_h / output_h;
line_h * line_v <= line_count

  

RTSP 参数

1
2
3
4
5
6
7
8
9
10
"rtsp" : [
    {
        "id" : 0, //id
        "url" : "rtsp://168.168.3.100:554/av_stream",   //url
        "usr" : "admin", //username
        "pwd" : "firefly123", //password
        "tcp" : false // Is tcp?
     },
  ...
  ]

  

RTSP参数为一个数组,配置每一路rtsp流的参数。

 

 

———————————————
更多信息请关注Firefly公众微信号fireflytee:
 
———————————————
Firefly官网:http://www.t-firefly.com

Firefly开源社区:http://developer.t-firefly.com
posted @   DEPX  阅读(4934)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示