支援 Facebook 的直播視像 API

常見問題

直播軟件(也稱為 RTMP 編碼軟件)會獲取您的 RTMP 串流影片網址和金鑰,然後將之傳送至 Facebook。我們亦不提供直播軟件。許多直播串流影片均可使用 OBS(開放式直播軟件)或 Player.me,兩者均設有免費版本。

您可以立即開始使用 Live API。但是,如果您想建立使用多部相機和顯示卡的完整專業級直播,則可能需要 1 至 2 星期或更久,具體取決於應用程式審查的速度。

從您開始直播到 Facebook 播出影片之間有 4 至 5 秒的延遲。當您看到影片在測試(或公開)專頁中播放時,即表示直播已開始。

如果遇到任何有關直播串流影片的問題,請參考我們的直播視像疑難解決指南。此外,我們亦建議您閱讀規格指南,以確保您的設定可助您提供優質直播串流影片。如果您認為自己遇到任何錯誤,請直接將之傳送至我們的錯誤提報工具,我們的工程師將盡快聯絡您。

當然可以!第二種串流影片所傳送的推斷性通知數量可能會少於第一種。如欲了解更多有關直播通知運作原理的資訊,請參閱我們的文件。

不一定。如果您想在兩個(或更多)不同的專頁中串流直播,您可以使用多種編碼器和 API 以做到這一點,例如 Wowza 和 Streamshark。雖然您可使用一個編碼器在多個不同專頁中串流直播,但我們建議您僅在一個專頁中串流直播,然後將之分享至另一個專頁,以便合併回應、心情和觀看次數。

我們的預設長闊比例是 16x9,但我們亦會從串流影片中推斷長闊比例。如欲了解更多有關技術規格的資訊,請參閱我們的規格、品牌置入內容及版權指南

您可以在直播視像 API 中使用 embeddable 參數嵌入直播視像。

傳送一個 POST /{live_video_id} 要求,然後將 embeddable 參數設定為 true。使用擁有建立直播視像時需要使用的權限之專頁或用戶存取憑證。

curl -i -X POST \
 "https://graph.facebook.com/{your-live-video-id}
   ?embeddable=true&access_token={your-access-token}"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/{your-live-video-id}",
  new JSONObject("{}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{your-live-video-id}"
           parameters:@{ @"embeddable": @"true",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{your-live-video-id}',
  'POST',
  {"embeddable":"true"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/{your-live-video-id}',
    array (
      'embeddable' => 'true'
    ),
    '{access-token}'
  );
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();

如要獲取內嵌 HTML,請傳送 GET /{live_video_id}?fields=embed_html 要求。使用擁有建立直播視像時需要使用的權限之專頁或用戶存取憑證。

curl -i -X GET \
 "https://graph.facebook.com/{your-live_video_id}
   ?fields=embed_html
   &access_token={your-access-token}"
GraphRequest request = GraphRequest.newGraphPathRequest(
  accessToken,
  "/{your-live_video_id}",
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});

Bundle parameters = new Bundle();
parameters.putString("fields", "embed_html");
request.setParameters(parameters);
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/{your-live_video_id}"
           parameters:@{ @"fields": @"embed_html",}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/{your-live_video_id}',
  'GET',
  {"fields":"embed_html"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->get(
    '/{your-live_video_id}',
    '{access-token}'
  );
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();

回應範例

{ "embed_html": "<iframe src=\"https://www.facebook.com/plugins/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fyourpage%2Fvideos%2F{your-page-id}%2F&width=0\" width=\"0\" height=\"0\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" allowFullScreen=\"true\"></iframe>", "id": "{your-live-video-id}" } 

不,這是正常的情況。目前,用戶必須等待直播視像變為 VOD(點播影片),方可在流動版網頁觀看它們。然而,如果您想在流動版網頁觀看嵌入到其他網站的直播視像,則您將會被重新導向至 Facebook 應用程式,以觀看該內容。

影片消失的原因有多種。以下是其中幾種最常見的原因:

  1. 如果您的直播視像中含有音樂,您的影片可能會因為侵犯版權而遭刪除。這可能會發生在直播期間或之後(VOD 重播模式)。
  2. 您或您專頁的另一位作者可能刪除了直播視像。如果直播視像已被手動刪除,則無法恢復。
  3. 系統可能將您的影片自動標記為侵犯知識產權。如果發生這種情況,Facebook 將向您傳送一封包含連結的電郵,以便您查看刪除詳情,並重新提交影片以供我們的政策團隊審查。

如果發出直播視像結束訊號後,直播未有開始封存或處理該訊號,則直播視像會在結束後仍然顯示為「直播中」。請確保您已使用 end_live_video 參數傳送 POST 要求。如果情況依然持續出現,請使用我們的錯誤提報工具回報錯誤,並記得附上您的影片編號。

請參閱我們的錯誤代碼清單,以進一步了解您遇到的問題。

當 Facebook 收到含有失真音訊的影片串流,或在我們收到影格後將之重新編碼以供直播之前,都可能會出現音訊失真的情況。出現此類錯誤的原因可能是由於使用的比特率高於直播端點與 Facebook 伺服器之間的連線可支援的比特率。如果是這樣的情況,或者丟失了套件,一些影片或音訊軌道將無法正確接收,從而導致音訊失真。

當直播視像透過受限頻寬傳送至用戶端,或用戶端沒有足夠的頻寬來即時觀看直播視像時,便可能會出現聲畫不同步的問題。此外,如果 Facebook 伺服器所接收的串流影片聲畫不同步,那麼直播視像也將會出現同樣的問題。請務必檢查錄製內容和編碼硬件,以找出有可能出現聲畫不同步的位置。

直播視像 API 要求內容包含音訊。如果您嘗試僅串流直播視像,則串流影片將會終止。

當編碼器出現故障或網絡連線不穩定時,直播便可能會中斷。如果出現此情況,您有 2 至 3 分鐘的時間重新連接至為直播帖子產生的原始直播網址。否則,您將需要產生一個新的串流影片金鑰和網址,以繼續播放直播串流影片。

是,您可設定地區限制(即根據觀眾的所在地點,限制誰可以觀看您的影片)。如欲了解更多有關直播視像 targeting 欄位的資訊,請參閱我們的廣告受眾目標指定進階用戶指南

您可以恢復因侵犯版權而遭移除的影片。您將收到一則通知,讓您選擇恢復該影片。不過,如果您在收到該則通知後未有作出此動作,則影片再也無法恢復。

不可以。很遺憾,您目前暫時無法推廣直播視像。

我們目前尚未有用於建立隱藏字幕的端點。不過,您可在 LiveVideo 直播結束後為其加入隱藏字幕,或者在直播視像串流至 Facebook 伺服器時,使用 CEA-608 隱藏字幕標準為其加入隱藏字幕。

如要為已結束的 LiveVideo(即狀態為 VOD)加入隱藏字幕,請參閱我們的「我可以如何為專頁影片加入字幕?」說明主題。如要使用 CEA-608 隱藏字幕標準加入隱藏字幕,請參閱我們的隱藏字幕指南

在直播串流影片中加入第三方廣告會違反 Facebook 的直播視像政策。例如,請勿發佈影片前串場廣告、片頭廣告、片中廣告或片尾廣告。

我們建議您僅播放現場直播內容,以確保觀眾體驗的完整性。不過在特殊情況下,您也可能需要轉換至事先錄製的影片,就像新聞節目需要在電視直播中播放預先錄製內容一樣。詳情請參閱我們的規格、品牌置入內容及版權指南

如要出現於 Facebook Live 地圖,您必須在 POST /{live_video_id} 要求中使用 place 參數,以設定影片的所在地點。

如要重設固定金鑰,請前往 www.facebook.com/live/create,點擊建立直播串流影片,選取使用固定串流影片金鑰選框,然後點擊重設按鈕。

回報錯誤

如果您認為您發現到 Live API 的錯誤,請在我們的除錯工具中提交錯誤報告,我們的工程師會儘快調查報告內容。此外,您亦可使用 API 錯誤代碼、SDK 方法等來搜尋現有錯誤。

回報錯誤