2016-11-17 34 views
3

我正嘗試使用ffmpeg將網頁流式傳輸到Facebook直播視頻。我知道我可以使用OBS,但我試圖從服務器上完成,所以我不能使用OBS。它在我預覽時工作得很好,但只要按下「Go live」,起初它似乎就開始了,但是當它將我帶到實時視圖時,它只是說視頻已結束。我甚至用Graph API檢查了視頻日誌的錯誤,什麼都沒有。我使用PhantomJS管道截圖的ffmpeg:使用ffmpeg流式傳輸到Facebook直播視頻:可以預覽,但不能上線

phantomjs phantom.js | ffmpeg -y -c:v mjpeg \ 
-f image2pipe \ 
-r 5 -i \ 
- -c:v libx264 \ 
-x264-params keyint=5 \ 
-b:v 1000k -minrate 1000k -maxrate 1000k -bufsize 500k \ 
-f flv 'rtmp://rtmp-api.facebook.com:80/rtmp/xxxxxxxxxxxxxxxx' 

正如我所說的,它在Facebook上的直播流的預覽工作正常,但是當我去住只是立即結束。我添加了比特率選項以嘗試按照Facebook的要求保持恆定的比特率(https://developers.facebook.com/docs/videos/live-video/production-broadcasts),並且每5幀有一個關鍵幀(相當低的5fps幀率),以滿足要求。

我沒有發送任何音頻,會導致問題嗎?

+0

我有完全相同的問題。我也沒有發送任何音頻。預覽的作品,但當我按「上線」需要一段時間,然後顯示視頻已結束。 ffmpeg停止後不久。 – BugHunterUK

+0

嘗試添加音頻,沒有運氣。我認爲這實際上與幀速率有所不同,因爲實時處理,試圖找到方法來解決這個問題,所以ffmpeg可以在確切的時刻拉取圖像。 –

+0

我得到它的工作:https:// gist.github.com/JamesTheHacker/56fb9caf36244de582540e7d5c2fd6a5 – BugHunterUK

回答

1

Facebook Live需要30幀/秒的幀速率。你發送它5,所以你需要轉換。您還需要最多2秒的關鍵幀間隔。嘗試添加輸出幀速率:

phantomjs phantom.js | ffmpeg -y -c:v mjpeg \ 
-f image2pipe \ 
-framerate 5 \ 
-i - \ 
-r 30 \ 
-c:v libx264 \ 
-x264-params keyint=60 \ 
-b:v 1000k -minrate 1000k -maxrate 1000k -bufsize 500k \ 
-f flv 'rtmp://rtmp-api.facebook.com:80/rtmp/xxxxxxxxxxxxxxxx' 
+0

仍然不工作,輸出在低幀率。你能幫我嗎。 –

+1

@bhargavjoshi如果你沒有音頻添加沉默'-f lavfi -i anullsrc'&'-c:aac'(可能是BS,但有些似乎期望或需要音頻)。您也可能需要使用YUV 4:2:0,所以添加'-pix_fmt yuv420p'作爲輸出選項,並嘗試在您的輸入中使用'-re'。 – LordNeckbeard

+0

@bhargavjoshi你可以輸出到一個文件來驗證輸出是5 FPS而不是30嗎?你能顯示你的參數順序嗎? '-r 30'需要在STDIN的指定之後和輸出URL之前。 – Brad

相關問題