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利用率、顯存成線性關系;