Firefly开源社区

标题: 多路RTSP流解码:最高可支持12路视频编解码 [打印本页]

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

[mp4]https://download.t-firefly.com/video/%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E8%A7%86%E9%A2%91/%E5%A4%9A%E8%B7%AF%E7%BC%96%E8%A7%A3%E7%A0%81.mp4?OSSAccessKeyId=LTAIDdtien9KAesM&Expires=1578106641&Signature=9kGlyb8MT1ZzCeIYnaLtur%2Fj6MU%3D[/mp4]

调用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. $ sudo apt update   
  2. $ 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.     "basepara" : {
  2.         "dri_path" : "/dev/dri/card0",  //不要修改
  3.         
  4.         "prefer_monitor_w" : 1920,
  5.         "prefer_monitor_h" : 1080,
  6.         
  7.         "code_type" : "H265", //rtsp流编码类型,H264/H265
  8.          "line_count" : 12,  //rtsp流数量
  9.          
  10.          "output_w" : 480,  //每一路解码后的输出size.
  11.          "output_h" : 360,
  12.          
  13.          "rotate" : 0 //旋转   未使用
  14.          
  15.          },
复制代码

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

RTSP 参数

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


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






———————————————
更多信息请关注Firefly公众微信号fireflytee:

———————————————
Firefly官网:http://www.t-firefly.com

Firefly开源社区:http://developer.t-firefly.com















作者: ruixiang    时间: 2020-1-4 20:05
对这个方案很感兴趣。咨询一下,12路摄像头是怎么接在板子上的,用的是什么摄像头,板子上走什么接口?
作者: penguin    时间: 2020-1-15 09:51
网络摄像头, 以太网口。
作者: will92    时间: 2020-1-17 10:41
楼主你好,是否可以提供一下源码呢
作者: fencer    时间: 2020-1-20 16:42
本帖最后由 fencer 于 2020-1-20 17:16 编辑

我在rk3328-cc上运行总是提示taskset failed to set pid affinity: invalid argument 是什么原因?
找到了原因是test_ff_rtsp_dec中有taskset有问题,需要更改

作者: syzfjia    时间: 2020-2-13 13:17
这个能否在3188系列上运行?源代码是否开放?
作者: 鹏鹏鹏鹏鹏飞    时间: 2020-2-26 16:20
fencer 发表于 2020-1-20 16:42
我在rk3328-cc上运行总是提示taskset failed to set pid affinity: invalid argument 是什么原因?
找到了 ...

我也遇到了这个问题,请问test_ff_rtsp_dec是哪个文件
作者: 鹏鹏鹏鹏鹏飞    时间: 2020-2-26 16:24
fencer 发表于 2020-1-20 16:42
我在rk3328-cc上运行总是提示taskset failed to set pid affinity: invalid argument 是什么原因?
找到了 ...

找到位置了,请问怎么修改才能正确运行
作者: qiujs926    时间: 2020-3-3 08:48
能提供源码参考下吗
作者: penguin    时间: 2020-3-7 12:45
这个应用程序有更新, 请
apt update
apt install firefly-multi-rtsp
重新测试
作者: gxy801    时间: 2020-3-11 17:42
这种方式,能否在安卓端实现解码和编码
作者: usasos000    时间: 2020-3-12 10:07
请问小白用户组如何查看这个方案呢
作者: wz_sean    时间: 2020-3-13 08:18
能否给一个源码出来做二次开发,急需!!!谢谢啦
作者: guaji    时间: 2020-4-7 11:10
请问这个12路解码的视频是1080p的吗?
作者: luqinlive    时间: 2020-6-24 09:28
可以在firefly3399上做人脸二次开发吗,这个DEMO开源吗
作者: wx_Steve_lM4NZ    时间: 2020-9-11 18:14
楼主,test_ff_rtsp_dec源码有吗,不知道怎么集成啊,不能只是测试吧
作者: saintwang    时间: 2021-2-24 09:36
tongwen 楼主,test_ff_rtsp_dec源码有吗,不知道怎么集成啊,不能只是测试吧
作者: aizizai    时间: 2021-5-6 10:25
能否说下延时多少?
作者: woshipzd    时间: 2021-10-11 17:14
请问有源码提供么

作者: xiezejie    时间: 2021-11-9 15:28
你好我现在在用贵公司的3568,但是没发现有这个的demon,是不是我没搜到,你这个有没有源码我可以当作参考
作者: 街角「咖啡店」    时间: 2022-5-5 16:36
AIO-RK3399ProC 上测试,配置完config.json后运行test_ff_rtsp_dec  是黑屏的状态,请问是什么原因啊。
作者: 街角「咖啡店」    时间: 2022-5-5 16:59
[2022/05/05 08:55:04] W/: (threadRtpFunc in unit_rtsp_client.cpp:122): UDP-RTP receive timeout. rtsp://xxxxx:554/Streaming/Channels/201 ; type = Audio
mpp_log: decode_get_frame failed, return -8.
mpp_log: decode_get_frame failed, return -8.
mpp_log: decode_get_frame failed, return -8.
mpp_log: decode_get_frame failed, return -8.
[2022/05/05 08:55:04] W/: (threadRtpFunc in unit_rtsp_client.cpp:122): UDP-RTP receive timeout. rtsp://xxxx:554/Streaming/Channels/201 ; type = Video
[2022/05/05 08:55:04] D/: close curl rtsp://xxxxx:554/Streaming/Channels/201
[2022/05/05 08:55:04] W/: (threadRtpFunc in unit_rtsp_client.cpp:122): UDP-RTP receive timeout. rtsp://xxxxx:554/Streaming/Channels/201 ; type = Audio
mpp_log: decode_get_frame failed, return -8.

好像是url地址不对,我读取海康的摄像头
使用rtsp://用户名:密码@IP地址:554/Streaming/Channels/201  这样的方式可以读取的。
不知config.json里面应该怎么配置。
作者: wx__HK33m3    时间: 2024-1-3 17:20
penguin 发表于 2020-3-7 12:45
这个应用程序有更新, 请
apt update
apt install firefly-multi-rtsp

firefly@firefly:/etc$ sudo apt install firefly-multi-rtsp
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package firefly-multi-rtsp
下载不了是啥原因,我安装的最新的Ubuntu 20.04.6 LTS (GNU/Linux 4.4.194 aarch64),使用的是3399-jd4




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1