หากต้องการแพร่ภาพวิดีโอถ่ายทอดสด คุณจะต้องสร้างอ็อบเจ็กต์ LiveVideo
ก่อน อ็อบเจ็กต์ LiveVideo
แสดงถึงการแพร่ภาพ และคุณสามารถจัดการคุณสมบัติของอ็อบเจ็กต์นี้เพื่อควบคุมการตั้งค่าการแพร่ภาพได้ เมื่อสร้างขึ้นมาแล้ว API นี้จะส่งคืน ID ของอ็อบเจ็กต์ LiveVideo
และ URL สตรีม ซึ่งคุณสามารถส่งไปยังตัวเข้ารหัสและใช้เพื่อสตรีมข้อมูลไปยังอ็อบเจ็กต์ LiveVideo
ได้
ในวันที่ 10 มิถุนายน 2024 Meta จะเปิดใช้ข้อกำหนดแบบใหม่ ซึ่งต้องปฏิบัติตามก่อนที่บัญชีจะสามารถเริ่มถ่ายทอดสดบน Facebook ได้ ข้อกำหนดแบบใหม่มีดังต่อไปนี้
หากต้องการแพร่ภาพบนอ็อบเจ็กต์ User
ให้รับโทเค็นการเข้าถึงผู้ใช้ที่มีสิทธิ์การอนุญาต publish_video
และส่งคำขอไปยัง
POST /<USER_ID>/live_videos?status=LIVE_NOW
โปรดดูข้อมูลอ้างอิงเกี่ยวกับจุดเชื่อมโยง /live_videos
เพื่อดูพารามิเตอร์สตริงการสืบค้นเพิ่มเติมต่างๆ ที่คุณสามารถใส่ไว้เพื่ออธิบายการแพร่ภาพได้ เช่น title และ description
เมื่อทดสอบการเรียกใช้ API คุณสามารถเพิ่มพารามิเตอร์ access_token
ที่ตั้งเป็นโทเค็นการเข้าถึงของคุณได้ ทั้งนี้ เมื่อดำเนินการเรียกใช้แบบปลอดภัยจากแอพของคุณ ให้ใช้คลาสโทเค็นการเข้าถึง
เมื่อดำเนินการสำเร็จ API นี้จะสร้างอ็อบเจ็กต์ LiveVideo
ขึ้นมาบน User และส่งคืน secure_stream_url
และ id
ของอ็อบเจ็กต์ LiveVideo
การแพร่ภาพจะปรากฏในโพสต์บนโปรไฟล์ของผู้ใช้ทันทีที่คุณส่งข้อมูลไปยัง 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
เพื่อดูพารามิเตอร์สตริงการสืบค้นเพิ่มเติมต่างๆ ที่คุณสามารถใส่ไว้เพื่ออธิบายการแพร่ภาพได้ เช่น title และ description
เมื่อทดสอบการเรียกใช้ API คุณสามารถเพิ่มพารามิเตอร์ access_token
ที่ตั้งเป็นโทเค็นการเข้าถึงของคุณได้ ทั้งนี้ เมื่อดำเนินการเรียกใช้แบบปลอดภัยจากแอพของคุณ ให้ใช้คลาสโทเค็นการเข้าถึง
เมื่อดำเนินการสำเร็จ API นี้จะสร้างอ็อบเจ็กต์ LiveVideo
ขึ้นมาบน Page และส่งคืน secure_stream_url
และ id
ของอ็อบเจ็กต์ LiveVideo
การแพร่ภาพจะปรากฏในโพสต์บนเพจทันทีที่คุณส่งข้อมูลไปยัง 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 วินาที ด้วยเหตุนี้ ให้จำกัดการสืบค้นไม่ให้เกิน 1 ครั้งทุกๆ 2 วินาที โดยระบบจะตรวจจับและรายงานการหมดเวลาสตรีมหลังจากที่ไม่ได้รับข้อมูล 4 วินาที
หากต้องการอ่านอ็อบเจ็กต์ User
ให้รับโทเค็นการเข้าถึงผู้ใช้หรือเพจที่เหมาะสมซึ่งมีสิทธิ์การอนุญาต publish_video
และส่งการสืบค้นไปยัง
GET /<LIVE_VIDEO_ID>?fields=<COMMA_SEPARATED_LIST_OF_FIELDS>
ใช้พารามิเตอร์ {fields}
เพื่อระบุช่องของอ็อบเจ็กต์ LiveVideo ที่คุณต้องการให้ระบบส่งคืนมา ตัวอย่างเช่น ด้านล่างนี้คือคำขอเพื่อรับ ingest_streams
บนอ็อบเจ็กต์ LiveVideo
ซึ่งมีข้อมูลเกี่ยวกับประสิทธิภาพการสตรีมอยู่
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 | URL การนำเข้า RTMPS ที่ปลอดภัยสำหรับ ID ของวิดีโอถ่ายทอดสดที่กำลังสืบค้น |
stream_url | URL การนำเข้า RTMP สำหรับ ID ของวิดีโอถ่ายทอดสดที่กำลังสืบค้น |
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 จะส่งคืน ID ของอ็อบเจ็กต์ LiveVideo
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?end_live_video=true"
{ "id": "10213570560993813" //<LIVE_VIDEO_ID> }
คุณสามารถดำเนินการ GET
กับ 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 ขึ้นมาตามปกติก่อน และตั้งค่าสถานะเป็น PREVIEW เมื่อสร้างขึ้นมาแล้ว ให้สืบค้นอ็อบเจ็กต์ LiveVideo และส่งคำขอช่อง secure_stream_url พร้อมช่องที่ซ้อนกันดังต่อไปนี้
secure_stream_url.inband_go_live(require_inband_signal)
การทำเช่นนี้จะเปิดใช้งานการเริ่มถ่ายทอดสดที่มีความแม่นยำระดับเฟรมบนอ็อบเจ็กต์ LiveVideo และ API จะตอบกลับมาเป็น URL สตรีมที่ปลอดภัยอันใหม่ ซึ่งคุณสามารถสตรีมไปที่ URL ดังกล่าวได้ โดยที่คุณไม่จำเป็นต้องสนใจ URL สตรีมที่ปลอดภัยอันแรกที่ระบบส่งให้กับคุณตอนที่สร้างอ็อบเจ็กต์ LiveVideo ครั้งแรก
การแพร่ภาพจะเริ่มถ่ายทอดสดและแสดงต่อผู้ชมหลังจาก (1) มีการตั้งค่าสถานะการแพร่ภาพเป็น LIVE (ผ่านการเรียกใช้ API กราฟหรือผู้ใช้เผยแพร่จาก Live Producer) และ (2) ตัวเข้ารหัสส่งข้อความ RTMP ในการเริ่มถ่ายทอดสด
แพ็คเก็ต AMF0 (ประเภท 0x12) ที่ประกอบด้วยสิ่งต่อไปนี้
onGoLive
timestamp
โปรดดูข้อมูลเพิ่มเติมที่ข้อกำหนดของ RTMP และ AMF0
ตัวอย่างคำขอในการเปิดใช้งานการเริ่มถ่ายทอดสดที่มีความแม่นยำระดับเฟรมบน 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..."
URL สตรีมที่ปลอดภัยสำหรับอ็อบเจ็กต์ 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 การแก้ไขวิดีโอ โปรดใช้ 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 |