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.mp4
GPU解码
不限制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利用率、显存成线性关系;