2017-02-17 262 views
0

你好我重新流送的HLS流作爲HLS流如何降低ffmpeg的CPU使用率?

SETLOCAL 
:loop 

ffmpeg -thread_queue_size 32768 -i "http://xx/636.m3u8" -f hls -hls_time 5 -hls_list_size 5 -hls_allow_cache 0 -hls_flags delete_segments -segment_list_flags +live -hls_base_url "../ts/" -hls_segment_filename "C:\nginx\html\ts\lig-%random%%random%-%%3d.svgz" -y "C:\nginx\html\hls\lig1.m3u8" > log.txt 

goto loop 

但它使用15-20%的CPU我必須做出16個數據流一樣,在同一臺服務器,但我不能。

着我做出像剛纔下載.ts文件克隆M3U8的配置?

+0

此問題與編程無關,屬於SuperUser.com。 – Brad

回答

3

默認情況下,FFmpeg的將嘗試重新編碼輸入,即使你不使用任何編碼相關的參數。

如果你想剛纔複製的流原樣,你應該嘗試複製音頻流功能:

-c:v copy -c:a copy

通過複製輸入數據流,可以完全跳過編碼過程。 所以,你的命令是這樣的:

ffmpeg -thread_queue_size 32768 -i "http://xx/636.m3u8" -f hls -c:v copy -c:a copy -hls_time 5 -hls_list_size 5 -hls_allow_cache 0 -hls_flags delete_segments -segment_list_flags +live -hls_base_url "../ts/" -hls_segment_filename "C:\nginx\html\ts\lig-%random%%random%-%%3d.svgz" -y "C:\nginx\html\hls\lig1.m3u8" > log.txt 

(不知道是否會工作,雖然)


當你需要重新編碼的輸入流,你應該考慮到爲命令添加一些編碼參數。 默認情況下,ffmpeg會嘗試匹配源參數和質量,在實時應用程序中這並不總是最優的。

的「veryfast,超高速和超高速」 H264預置是一個好的開始獲得一些性能提升。

​​

您也可以撥弄CRF(恆定速率因子)編碼,更高的比特率等 更多關於H264 enoding:https://trac.ffmpeg.org/wiki/Encode/H.264

+0

當我鍵入-preset:v超快到命令行ffmpeg stucks凍結 –

+0

如果你正在重新編碼,你必須定義編解碼器'例如:-c:v h264'!另外,削減'> log'部分,它禁止ffmpeg告訴出了什麼問題。 –

0

-Re(輸入) 閱讀在本地幀速率輸入。主要用於模擬抓取設備或實時輸入流(例如,從文件讀取時)。不應該與實際的抓取設備或實時輸入流一起使用(它可能導致數據包丟失)。默認情況下,ffmpeg嘗試儘可能快地讀取輸入。該選項將會將輸入的讀數減慢到輸入的本地幀速率。它對實時輸出(例如直播)非常有用。

0

儘管這個問題已經被認爲是說,我認爲它缺乏不涉及調整命令參數,但可以使用其他工具或命令而不是僅僅的ffmpeg使用的答案。

請將CPULimit工具正是爲此而設計的,而不是隻爲ffmpeg的同時也爲你想減少這種資源的利用任何其他CPU密集型的過程將有效地開展工作。

cpulimit最重要的參數是-l,它允許您指定進程將被允許使用的CPU百分比(作爲其上限)。請,也可觀察到該極限取決於CPU的/核的數量/線程機器已經,例如,如果機器具有8個CPU,請將CPULimit -l有效值範圍從0至800(0是沒有用的,當然,並800意味着完全不限制該過程,因爲800%意味着所有機器處理能力)。

使用一半的容量爲8個CPU機

實施例: cpulimit -l 400 ffmpeg ...

希望這有助於爲這一特定問題,以及在將來的類似需求。