ffmpeg是流媒体主流处理框架之一,它具备强大的流媒体处理能力。
本实践聚焦于如何高效进行视频流解码并进行对比验证CPU解码和GPU解码加速影响。
考虑到解码性能对比,本实践采用跳25帧的方式解码。
CPU解码
不限制cpu数量
ffmpeg -i jc.mp4 -f rawvideo -pix_fmt rgb24 -r 1 pipe: | cat > out.mp4限制cpu数量
限制cpu数量为1
ffmpeg -i j1.mp4 -f rawvideo -pix_fmt rgb24 -r 1 pipe: | cat > out.mp4GPU解码
不限制cpu数量
ffmpeg  -hwaccel cuda -i j1.mp4 -f rawvideo -pix_fmt yuv420p -r 1 pipe: | cat > out.yuv限制cpu数量
限制cpu数量为1
ffmpeg  -hwaccel cuda -i jc.mp4 -f rawvideo -pix_fmt yuv420p -r 1 pipe: | cat > out.yuv实验结果
测试对比视频流解码至buffer,并且跳帧25的情况,即每秒只处理一帧,两路表示启动两个进程。
| 视频流路数 | cpu数量 | 解码方式 | fps | speed | cpu | gpu | 
| 1 | 不限制 | CPU | 23 | 22.8x | 535% | - | 
| 2 | 不限制 | CPU | 23 | 23.1x | 1080% | - | 
| 1 | 1 | CPU | 5.1 | 5.1x | 97.3% | - | 
| 2 | 1 | CPU | 2.6 | 2.6x | 97.3% | - | 
| 1 | 不限制 | GPU | 26 | 26x | 102% | 25% | 
| 2 | 不限制 | GPU | 25 | 25.2x | 213% | 50% | 
| 1 | 1 | GPU | 22 | 22.3x | 92% | 18% | 
| 2 | 1 | GPU | 11 | 10.7x | 94% | 22% | 
结论
- 单路纯CPU解码CPU利用率535%,多路就会成为瓶颈,单路GPU解码情况下,CPU资源利用率约为102%,分析主要用于GPU->CPU拷贝和frame帧像素转换;
- 纯CPU解码下,视频流路数与CPU利用率成线性关系;
- GPU解码下,视频流路数与GPU利用率、CPU利用率、显存成线性关系;