2013-04-23 129 views
6

我想使用FFmpeg將視頻循環流式傳輸給justin.tv?我已成功地環路的圖像序列,並與線音頻結合起來:FFmpeg實時流 - 循環視頻?

 
ffmpeg -loop 1 -i imageSequence%04d.jpg -f alsa -ac 2 -ar 22050 -ab 64k \ 
    -i pulse -acodec adpcm_swf -r 10 -vcodec flv \ 
    -f flv rtmp://live.justin.tv/app/<yourStreamKeyHere> 

是否有可能與視頻文件來做到這一點?

回答

2

Sinclair Media已經找到了解決方案,通過使用lavfi過濾器和附加:loop=0的文件名:

這是未經測試:

ffmpeg -f lavfi -re -i movie=StreamTest.avi:loop=0 \ 
-acodec libfaac -b:a 64k -pix_fmt yuv420p -vcodec libx264 \ 
-x264opts level=41 -r 25 -profile:v baseline -b:v 1500k \ 
-maxrate 2000k -force_key_frames 50 -s 640×360 -map 0 -flags \ 
-global_header -f segment -segment_list index_1500.m3u8 \ 
-segment_time 10 -segment_format mpeg_ts \ 
-segment_list_type m3u8 segmented.ts 

但它應該創建一個本地「index_1500.m3u8」文件在「StreamTest.avi」中流式傳輸視頻。

+0

我不得不使用這些參數,使其正常工作:'-f lavfi -re -fflags + genpts -i「電影= GleamingThatBrownbutterfly.webm:循環= 0,setpts = N /(幀頻* TB) 「'。如果沒有這些,它會在第一次循環後停止,其餘的幀被丟棄。 – jadkik94 2016-09-05 19:13:10

3

絕對有可能。在ffmpeg的最新版本中,他們添加了-stream_loop標誌,允許您根據需要多次循環輸入。

問題是,如果您不從源重新生成pts,ffmpeg會在第一次循環後丟棄幀(因爲時間戳會突然回退)。爲了避免這種情況,您需要告訴ffmpeg生成pts,以便在循環之間獲得遞增的時間戳。這是通過+ genpts調用完成的(它必須位於-i arg之前)。

下面是一個ffmpeg調用示例(用您的輸入文件替換$ F)。此示例生成兩個輸出流,並且-stream_loop -1參數告訴ffmpeg連續循環輸入。這種情況下的輸出用於類似的流式廣播攝取(MetaCDN),根據您的要求進行相應調整。

ffmpeg -threads 2 -re -fflags +genpts -stream_loop -1 -i $F \ 
-s 640x360 -ac 2 -f flv -vcodec libx264 -profile:v baseline -b:v 600k -maxrate 600k -bufsize 600k -r 24 -ar 44100 -g 48 -c:a libfdk_aac -b:a 64k "rtmp://publish.live.metacdn.com/2050C7/dfsdfsd/lowquality_664?hello&adbe-live-event=lowquality_" \ 
-s 1920x1080 -ac 2 -f flv -vcodec libx264 -profile:v baseline -b:v 2000k -maxrate 2000k -bufsize 2000k -r 24 -ar 44100 -g 48 -c:a libfdk_aac -b:a 64k "rtmp://publish.live.metacdn.com/2050C7/dfsdfsd/highquality_2064?mate&adbe-live-event=highquality_"