ライブ動画を配信するには、まずLiveVideo
オブジェクトを作成する必要があります。LiveVideo
はライブ配信を表すオブジェクトであり、このオブジェクトのプロパティを操作することにより、ライブ配信の設定を管理できます。このAPIを作成すると、LiveVideo
オブジェクトのIDとストリーミングURLが返されます。それらをエンコーダーに渡して、データをLiveVideo
オブジェクトにストリーミングするために使うことができます。
2024年6月10日、MetaはFacebookでライブ配信するアカウントが事前に満たす必要がある新しい要件の適用を開始します。新しい要件は以下のとおりです。
User
オブジェクトでライブ配信するには、publish_video
アクセス許可を付与されているユーザーアクセストークンを取得して、次の宛先にリクエストを送信します。
POST /<USER_ID>/live_videos?status=LIVE_NOW
タイトルや説明文など、ライブ配信を説明するために含めることができる追加のクエリ文字列パラメーターについては、/live_videos
エッジのリファレンスをご覧ください。
API呼び出しをテストする場合は、自分のアクセストークンに設定したaccess_token
パラメーターを含めることができます。ただし、アプリから安全な呼び出しを行う場合は、アクセストークンクラスを使用してください。
成功すると、APIによりそのユーザーに関するLiveVideo
オブジェクトが作成され、secure_stream_url
とLiveVideo
オブジェクトのid
が返されます。データが安全なストリーミングURLに送信されると、すぐにユーザーのプロフィールの投稿にライブ配信が表示されます。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
が返されます。データが安全なストリーミングURLに送信されると、すぐにページの投稿にライブ配信が表示されます。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
オブジェクトを読み込んで、ライブ配信のストリーミングのプレビューURLや、ビットレートやフレームレートなどのストリーミングの正常性に関するデータを取得できます。ストリーミングの正常性データは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 | クエリされているライブ動画IDが、視聴者に配信中の動画である場合は |
secure_stream_url | クエリされているライブ動画IDの安全なRTMPS取り込みURL。 |
stream_url | クエリされているライブ動画IDのRTMP取り込みURL。 |
video_bitrate | 受信している動画ストリームのビット毎秒。 |
video_framerate | 受信している動画ストリームのフレーム毎秒。 |
video_gop_size | GOP(写真のグループ)サイズ(ミリ秒単位)。 |
video_height | 受信している動画フレームの高さ(ピクセル単位)。 |
video_width | 受信している動画フレームの幅(ピクセル単位)。 |
ライブ配信を終了するには、エンコーダーからストリームURLへ渡されるライブ動画データのストリーミングを停止するか、次の宛先にリクエストを送信します。
POST /<LIVE_VIDEO_ID>?end_live_video=true
これにより、LiveVideo
オブジェクトのステータスがVOD
に設定され、後で視聴できるようにビデオオンデマンド(VOD)として保存されます。
成功すると、APIからLiveVideo
オブジェクトのIDが返されます。
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?end_live_video=true"
{ "id": "10213570560993813" //<LIVE_VIDEO_ID> }
GET
操作をLiveVideo IDに対して実行すると、そのステータスが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フィールドをリクエストします。
secure_stream_url.inband_go_live(require_inband_signal)
これで、LiveVideoオブジェクトにおける正確なフレームでのライブ配信開始が可能になり、APIは新しいセキュアストリーミングURLで応答してストリーミングできるようになります。LiveVideoオブジェクトを最初に作成したときに送信された最初のセキュアストリーミングURLは無視してかまいません。
ライブ配信が開始され、視聴者に表示されるのは、(1) (Graph API呼び出しにより、またはユーザーによるLive Producerからの公開により)ライブ配信ステータスがLIVEに設定され、(2)エンコーダーがライブ配信開始のRTMPメッセージを送信した後になります。
AMF0パケット(タイプ0x12)の内容は以下のとおりです。
onGoLive
timestamp
以下は、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オブジェクトのセキュアストリームURLの例です。
{ "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を使用してライブ動画を編集することはできません。ライブ動画IDを使用してください。 |
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 |