香橙派rk3588编程mpp解码rga转格式opengles渲染的视频播放器
演示效果
https://www.bilibili.com/video/BV1URLFzzEvS
1080p@30 码率2721kbps
注意 这是远程桌面 会比实际接屏幕效果差一些
性能
cpu 14.6%
gpu 20%
rga 2%


实现方案
ffmpeg拉流rtsp获得h264 为了传输稳定配置rtsp over tcp
mpp解码h264获得nv12 注意解码器会有帧长度对齐
rga转换nv12成rgb 将解码帧裁剪掉对齐的多余部分
opengles对接X11渲染rgb 使用pbo双缓冲提高内存加载到GPU的效率
为了减少图像帧拷贝 图像格式转换和渲染串行处理
不用pbo双缓冲时 图像格式转换+渲染100帧耗1386ms 平均13.86ms
使用pbo双缓冲时 图像格式转换+渲染100帧耗 845ms 平均8.45ms
在1080p@30下pbo双缓冲提升的效率约是39.03%
不同的gpu内存加载方式会影响图像格式转换耗时
不用pbo双缓冲时 图像格式转换100帧耗时132ms
使用pbo双缓冲时 图像格式转换100帧耗时484ms
为什么不同的方式会影响图像格式转换耗时?因为输出的内存不同 使用pbo双缓冲时 图像格式转换输出的内存是经过映射的 是从cpu用的内存映射到gpu的内存上 而不用pbo双缓冲时的 图像格式转换的输出内存不是映射gpu的内存 所以耗时不同
环境
主控 rk3588
板卡 香橙派5 ultra
系统 ubuntu桌面

浙公网安备 33010602011771号