การแพร่ภาพ

หากต้องการแพร่ภาพวิดีโอถ่ายทอดสด คุณจะต้องสร้างอ็อบเจ็กต์ LiveVideo ก่อน อ็อบเจ็กต์ LiveVideo แสดงถึงการแพร่ภาพ และคุณสามารถจัดการคุณสมบัติของอ็อบเจ็กต์นี้เพื่อควบคุมการตั้งค่าการแพร่ภาพได้ เมื่อสร้างขึ้นมาแล้ว API นี้จะส่งคืน ID ของอ็อบเจ็กต์ LiveVideo และ URL สตรีม ซึ่งคุณสามารถส่งไปยังตัวเข้ารหัสและใช้เพื่อสตรีมข้อมูลไปยังอ็อบเจ็กต์ LiveVideo ได้

ในวันที่ 10 มิถุนายน 2024 Meta จะเปิดใช้ข้อกำหนดแบบใหม่ ซึ่งต้องปฏิบัติตามก่อนที่บัญชีจะสามารถเริ่มถ่ายทอดสดบน Facebook ได้ ข้อกำหนดแบบใหม่มีดังต่อไปนี้

  • บัญชี Facebook จะต้องมีอายุการใช้งานมาแล้วอย่างน้อย 60 วัน
  • เพจ Facebook หรือโปรไฟล์โหมดมืออาชีพต้องมีผู้ติดตามอย่างน้อย 100 คน

การแพร่ภาพบน User

หากต้องการแพร่ภาพบนอ็อบเจ็กต์ 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

หากต้องการแพร่ภาพวิดีโอถ่ายทอดสดบน 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

จะเป็น true หาก ID ของวิดีโอถ่ายทอดสดที่กำลังสืบค้นคือวิดีโอที่กำลังแสดงให้กับผู้ชม

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 ในการเริ่มถ่ายทอดสด

โครงสร้างของข้อความ RTMP ในการเริ่มถ่ายทอดสด

แพ็คเก็ต AMF0 (ประเภท 0x12) ที่ประกอบด้วยสิ่งต่อไปนี้

  • สตริง onGoLive
  • อาร์เรย์ ECMA (ประเภท 0x08) ที่ประกอบด้วยคู่คีย์-ค่าเดียว ดังนี้
    • คีย์: สตริง (ประเภท 0x02) timestamp
    • ค่า: ตัวเลข (ประเภท 0x00): ประทับเวลาของเฟรมวิดีโอแรกที่จะแสดงแบบสาธารณะ

โปรดดูข้อมูลเพิ่มเติมที่ข้อกำหนดของ 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}"
}

รหัสข้อผิดพลาดของ API วิดีโอถ่ายทอดสดที่พบบ่อย

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

ต้องตั้งค่าความเป็นส่วนตัว

คุณจำเป็นต้องตั้งค่าความเป็นส่วนตัวก่อนเริ่มถ่ายทอดสด

รหัสข้อผิดพลาดเกี่ยวกับสิทธิ์การอนุญาต

CodeSubcodeMessageTypeMitigation 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