若要直播視像,您必須先建立 LiveVideo
物件。LiveVideo
物件表示直播,您可操控此物件的屬性以控制直播設定。建立後,此 API 將傳回 LiveVideo
物件的編號和串流網址,您可以將它們傳遞到您的編碼器並用於將數據串流到 LiveVideo
物件。
Meta 由 2024 年 6 月 10 日起推出一些新的必要條件,帳戶必須達到有關條件,才能在 Facebook 上開始直播。新的必要條件如下:
若要在 User
物件直播內容,請獲取擁有 publish_video
權限的用戶存取憑證,並傳送要求到以下位置:
POST /<USER_ID>/live_videos?status=LIVE_NOW
請參閱 /live_videos
關係連線參考資料,了解標題、說明等可新增用於描述直播內容的其他查詢字串參數。
測試 API 呼叫時,您可以在呼叫中加入 access_token
參數,並將其設為您的存取憑證。但是,從您的應用程式發出安全呼叫時,應使用存取憑證類別。
成功的話,此 API 將在用戶建立 LiveVideo
物件,並傳回 secure_stream_url
和 LiveVideo
物件的 id
。將數據傳送到安全串流網址後,直播內容便將立即出現在用戶個人檔案的帖子中。您可以查詢 LiveVideo
物件來監察直播的健康狀態以及結束直播內容。
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<USER_ID>/live_videos
?status=LIVE_NOW
&title=Today%27s%20Live%20Video
&description=This%20is%20the%20live%20video%20for%20today."
{ "id": "1953020644813104", //<LIVE_VIDEO_ID> "stream_url": "rtmp://rtmp-api.facebook...", "secure_stream_url":"rtmps://rtmp-api.facebook..." }
若要在 Page
直播視像,請獲取擁有 pages_read_engagement
和 pages_manage_posts
權限的專頁管理員專頁存取憑證,並傳送要求到以下位置:
POST /<PAGE_ID>/live_videos?status=LIVE_NOW
請參閱 /live_videos
關係連線參考資料,了解標題、說明等可新增用於描述直播內容的其他查詢字串參數。
測試 API 呼叫時,您可以在呼叫中加入 access_token
參數,並將其設為您的存取憑證。但是,從您的應用程式發出安全呼叫時,應使用存取憑證類別。
成功後,此 API 將在專頁建立 LiveVideo
物件,並傳回 secure_stream_url
和 LiveVideo
物件的 id
。將數據傳送到安全串流網址後,直播內容便將立即出現在專頁的帖子中。您可以查詢 LiveVideo
物件來監察直播的健康狀態以及結束直播內容。
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<PAGE_ID>/live_videos
?status=LIVE_NOW
&title=Today%27s%20Page%20Live%20Video
&description=This%20is%20the%20live%20video%20for%20the%20Page%20for%20today"
{ "id": "1953020644813108", //<LIVE_VIDEO_ID> "stream_url": "rtmp://rtmp-api.facebook...", "secure_stream_url":"rtmps://rtmp-api.facebook..." }
您可以讀取 LiveVideo
物件,獲得直播串流的預覽網址和串流健康狀況數據,例如位元速率和影格速率。串流健康狀況數據每 2 秒會重新整理一次,因此請最多每 2 秒查詢 1 次。如果 4 秒後沒有收到任何數據,則系統會偵測並報告串流逾時。
若要讀取 LiveVideo
物件,請獲取擁有 publish_video
權限的合適用戶或專頁存取憑證,並傳送查詢到以下位置:
GET /<LIVE_VIDEO_ID>?fields=<COMMA_SEPARATED_LIST_OF_FIELDS>
使用 {fields}
參數指定要傳回的 LiveVideo 物件欄位。例如,以下要求將獲得 LiveVideo
物件的 ingest_streams
,當中包含串流健康狀況數據:
curl -i -X GET \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?fields=ingest_streams"
{ "ingest_streams": [ { "stream_id": "0", "stream_url": "rtmp://rtmp-api.facebook...", "secure_stream_url": "rtmps://rtmp-api.facebook...", "is_master": true, "stream_health": { "video_bitrate": 4024116, "video_framerate": 60, "video_gop_size": 2000, "video_height": 720, "video_width": 1280, "audio_bitrate": 128745.4921875 }, "id": "1914910145231512" // <INGEST_STREAM_ID> } ], "id": "<LIVE_VIDEO_ID>" }
回應屬性
欄位名稱 | 說明 |
---|---|
audio_bitrate | 接收到的音訊串流之每秒位元數。 |
is_master | 如果正在查詢的直播視像編號是傳輸給受眾的視像,則為 |
secure_stream_url | 正在查詢的直播視像編號之安全 RTMPS 擷取網址。 |
stream_url | 正在查詢的直播視像編號之 RTMP 擷取網址。 |
video_bitrate | 接收到的影片串流之每秒位元數。 |
video_framerate | 接收到的影片串流之每秒影格數。 |
video_gop_size | GOP(圖片群組)大小,以毫秒為單位。 |
video_height | 接收到的影片影格高度,以像素為單位。 |
video_width | 接收到的影片影格闊度,以像素為單位。 |
若要結束直播內容,請停止將編碼器的直播視像數據串流到串流網址,或傳送要求到以下位置:
POST /<LIVE_VIDEO_ID>?end_live_video=true
這會將 LiveVideo
物件的狀態設為 VOD
,並儲存為點播影片(VOD),供您日後觀看。
成功的話,此 API 將傳回 LiveVideo
物件的編號。
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?end_live_video=true"
{ "id": "10213570560993813" //<LIVE_VIDEO_ID> }
您可以對 LiveVideo 編號執行 GET
操作,確認物件的狀態已設為 VOD
:
GET /<LIVE_VIDEO_ID>?fields=status
{ "status": "VOD", // Broadcast ended, saved as VOD "id": "10213570560993813" //<LIVE_VIDEO_ID> }
若要刪除已結束的直播內容並將之儲存為 VOD,請傳送要求到以下位置:
DELETE /<LIVE_VIDEO_ID>
curl -i -X DELETE \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>"
{ success: true }
在解碼初始串流數據和處理任何相關 API 要求時,直播開始畫面可能會稍有延遲。這會導致主播難以準確把握直播的開始時間。為了避免這個問題,可以將 LiveVideo 物件設為接受串流數據,但在串流數據內偵測到直播 RTMP 訊息前不向受眾開始直播。這樣,任何可以預覽直播內容的人都可以看到直播內容,同時讓串流編碼器可以精準控制向受眾開始直播的時間,以及受眾看到的第一個影格。
若要啟用畫面精準直播,首先如常建立 LiveVideo 物件,並將狀態設為「預覽」。建立後,查詢 LiveVideo 物件並要求獲得包含以下巢狀欄位的 secure_stream_url field:
secure_stream_url.inband_go_live(require_inband_signal)
這將在 LiveVideo 物件啟用畫面精準直播,且 API 會回應並顯示一個用於接收串流數據的新安全串流網址。您可以略過一開始建立 LiveVideo 物件時系統傳送給您的初始安全串流網址。
在 (1) 直播狀態設為「直播」(透過 Graph API 呼叫或用戶使用「直播管理工具」發佈)以及 (2) 編碼器傳送直播 RTMP 訊息後,直播內容將開始並向受眾展示。
AMF0 數據封包(0x12 類型),當中包含:
onGoLive
字串timestamp
字串(0x02 類型)在 LiveVideo 啟用畫面精準直播的要求範例。
curl -i -X GET \
"https://graph.facebook.com/v21.0
/LIVE_VIDEO_ID?fields=secure_stream_url.inband_go_live(require_inband_signal)&access_token=12345..."
啟用畫面精準直播的 LiveVideo 物件安全串流網址。
{ "secure_stream_url": "rtmps://rtmp-pc.facebook.com:443/rtmp/LIVE_VIDEO_ID?s_bl=1&s_gl=1&...", "id": "LIVE_VIDEO_ID" }
若要獲取與直播內容相關的錯誤代碼數據,請傳送要求到以下位置:
GET /<LIVE_VIDEO_ID>?fields=errors
此 API 將以 error code
、type
、message
和 timestamp
回應。
curl -i -X GET \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?fields=errors"
{ "errors": { "data": [ { "error_code": 1969004, "error_type": "stream", "error_message": "Video signal lost", "creation_time": "2018-12-05T23:58:52+0000" }, { "error_code": 1969004, "error_type": "stream", "error_message": "Video signal lost", "creation_time": "2018-12-05T23:58:52+0000" }, { "error_code": 0, "error_type": "info", "error_message": "Live Service received the video signal", "creation_time": "2018-12-05T23:58:02+0000" }, { "error_code": 0, "error_type": "info", "error_message": "Live Service received the video signal", "creation_time": "2018-12-05T23:58:02+0000" } ] }, "id": "{your-live-video-id}" }
error_subcode | 錯誤摘要 | 說明 |
---|---|---|
COPYRIGHT__LIVE_COPYRIGHT_VIOLATION | 違反直播版權 | 系統已停止您的直播視像,因為影片可能含有屬於其他專頁的影音內容。 |
VIDEO__CREATE_FAILED | 上載問題 | 上載您的影片時發生問題,因此影片無法上載。請再試一次。 |
LIVE_VIDEO__DELETE_FAILED | 直播視像尚未刪除 | 刪除您的直播視像時發生問題,因此影片無法刪除。請再試一次。 |
LIVE_VIDEO__EDIT_API_NOT_ALLOWED | 不允許在直播期間透過視像 API 編輯內容 | 不允許使用影片編輯 API 編輯直播視像。使用直播視像編號。 |
LIVE_VIDEO__LIVE_STREAM_ERROR | 一般串流直播 | 串流直播期間出現錯誤 |
LIVE_VIDEO__NOT_EXIST | 直播視像不存在 | 您想存取的直播視像不再存在於系統中。 |
LIVE_VIDEO__PRIVACY_REQUIRED | 必須完成私隱設定 | 您必須在直播前完成私隱設定。 |
Code | Subcode | Message | Type | Mitigation messaging |
---|---|---|---|---|
200 | 1363120 | Permissions error | OAuthException | You’re not eligible to go live Your profile needs to be at least 60 days old before you can go live on Facebook. Learn more at https://www.facebook.com/business/help/167417030499767?id=1123223941353904 |
200 | 1363144 | Permissions error | OAuthException | You’re not eligible to go live You need at least 100 followers before you can go live from your profile. Learn more at https://www.facebook.com/business/help/167417030499767?id=1123223941353904 |