2015-10-13 72 views
0

我有1-5輸入流,每個上傳的時間偏移稍有不同。ffmpeg - 將rtmp流切換爲單個編碼輸出?

藉助rtmp和ffmpeg,我可以可靠地將單個數據流編碼到HLS播放列表中,該播放列表可在我的目標投放平臺iOS上無縫播放。

我知道你可以接受多個輸入流到ffmpeg中,並且我想在輸入流之間切換以創建一致的單一無縫輸出。

所以我想定期在 rtmp://localhost/live/stream1 .. rtmp://localhost/live/stream5之間切換。有時會有多個流,有時不會。

在生成HLS播放列表時,ffmpeg在輸入流之間旋轉有什麼方法嗎?我的目標是避免爲服務器成本原因運行ffmpeg的重複實例,並且我認爲連接不同編碼的輸入流進行回放將是困難的,如果不是不可能的話。

切換每個段是理想的行爲,但我也需要保持流在時間上的同步。這可能嗎?

回答

1

由於初始連接時間和緩衝(rtmp_buffer),切換實時流輸入會導致延遲。

有沒有簡單的方法來與ffmpeg做到這一點。作爲一個開源項目,您可以自己添加功能。它不應該是很複雜的,如果所有的所有投入使用其他軟件做開關,如MLT或使用過濾器,例如zmq(ZeroMQ)共享相同的編解碼器,軌道數,幀大小等

Some people suggested使ffmpeg接受命令。

一種方式做到這一點。將重新流的本地端口上的源作爲mpgets和在輸出所述HLS命令將自身地址作爲輸入:每個流的

流切換器(60,一次一個) - 你可以做一個腳本,用自己的邏輯,這是用於說明目的:

ffmpeg -re -i rtmp://.../stream1 -t 60 -f mpegts udp://127.0.0.1:10000 
ffmpeg -re -i rtmp://.../stream2 -t 60 -f mpegts udp://127.0.0.1:10000 
[...] 
ffmpeg -re -i rtmp://.../stream5 -t 60 -f mpegts udp://127.0.0.1:10000 

使用本地地址作爲源的HLS流 - 它會等待輸入,如果有沒有和修復您的DTS/PTS,但您可能會在切換時引入一些延遲:

ffmpeg -re -i udp://127.0.0.1:10000 /path/to/playlist.m3u8