2016-06-28 73 views
3

我一直在用gstreamer腳本來發送一個rtmp-stream到Facebook Live。我嘗試了很多東西。當我把它發送到我自己的RTMP服務器時,這個流就可以工作,但Facebook不會接受它。Gstreamer for Facebook Live

我正在使用Ubuntu 15.10。我注意到OBS也有奇怪的行爲。在MBP上它似乎工作,但在我的盒子上它不會。

下面的流適合Facebook Live中提到的視頻/音頻規格。我在這裏列出他們:

視頻格式:

  • 我們接受不超過720p(720×1280)分辨率的視頻,每秒30幀。 (或每2秒1個關鍵幀)。檢查
  • 您必須在整個流中至少每兩秒發送一次I幀(關鍵幀)。 CHECK
  • 推薦的最大比特率是2500Kbps。檢查
  • 標題必須少於255個字符,否則流將失敗CHECK
  • 的直播API接受H264編碼的視頻和AAC音頻編碼只檢查

視頻長度:

  • 90直播頻道的最大分鐘數。 CHECK(未指定,所以我認爲它應該沒問題)

  • 預覽流的最大長度爲60分鐘(通過實時對話框或發佈者工具)。 60分鐘後,必須生成一個新的流密鑰 。 CHECK(未指定,所以我想它應該是罰款)

高級設置:

  • 像素寬高比:廣場CHECK,GStreamer的
  • 幀類型的默認行爲:逐行掃描未檢查,逐行掃描似乎是我的標準
  • 音頻採樣率:44.1 KHz CHECK
  • 音頻比特率:128 Kbps立體聲CHEC ķ
  • 比特率編碼:CBR CHECK,GStreamer的
的默認行爲

的Gstreamer命令:

gst-launch-1.0 v4l2src ! "video/x-raw,width=1280,height=720,framerate=30/1" ! x264enc bitrate=2500 key-int-max=10 ! video/x-h264,profile=high ! h264parse ! queue ! flvmux name=mux alsasrc device=hw:1 ! audioresample ! audio/x-raw,rate=44100 ! queue ! voaacenc bitrate=128000 ! queue ! mux. mux. ! rtmpsink location=\"rtmp://rtmp-api.facebook.com:80/rtmp/xxxxxxxxxxxxxxx?ds=1\&a=xxxxxxxxxxxxxxx\" 

沒有人得到的GStreamer爲Facebook的工作生活?

+0

你觀察到了什麼奇怪的行爲?你有看到麻煩的公開直播視頻的鏈接嗎? – Brad

+0

另外,請仔細檢查我們的關鍵幀間隔。您的參數名稱可能不同,但根據https://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping,它是'keyint'。而且,10幀太小...你會想把它設置在60秒2秒。否則,你將只吃這些關鍵幀的所有帶寬。 – Brad

+0

我嘗試了一個更高的關鍵幀,但沒有運氣。你鏈接到的文章也是針對ffmpeg的,我從gstreamer文檔中查找了關鍵幀參數,它應該以這種方式工作。 Facebook只是告訴我視頻不在線,這並沒有什麼幫助。 –

回答

0

變化:

video/x-h264,profile=high 

到:

video/x-h264,profile=baseline 

和它的作品。我嘗試過:

gst-launch-1.0 flvmux name=mux streamable=true ! rtmpsink location="<rtmp_url_for_fblive>" videotestsrc is-live=true ! "video/x-raw,width=1280,height=720,framerate=30/1" ! identity sync=true ! x264enc bitrate=2500 key-int-max=60 ! video/x-h264,profile=high ! h264parse ! queue ! mux. audiotestsrc is-live=true ! audio/x-raw,rate=44100,channels=2 ! identity sync=true ! voaacenc bitrate=128000 ! queue ! mux.