使用ffmpeg流式传输到Facebook直播视频:可以预览,但不能上线

问题描述:

我正尝试使用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

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