Để phát video trực tiếp, trước tiên, bạn phải tạo đối tượng LiveVideo
. Đối tượng LiveVideo
biểu thị nội dung phát. Bạn có thể tùy chỉnh thuộc tính của đối tượng này để kiểm soát chế độ cài đặt của nội dung phát. Sau khi tạo xong, API sẽ trả về ID của đối tượng LiveVideo
và URL luồng. Sau đó, bạn có thể chuyển ID và URL này cho bộ mã hóa và dùng để truyền dữ liệu sang đối tượng LiveVideo
.
Vào ngày 10/06/2024, Meta sẽ đưa ra các yêu cầu mới mà tài khoản phải đáp ứng thì mới có thể phát trực tiếp trên Facebook. Yêu cầu mới như sau:
Để phát trực tiếp trên đối tượng User
, hãy lấy mã truy cập dành cho Người dùng có quyền publish_video
rồi gửi yêu cầu đến:
POST /<USER_ID>/live_videos?status=LIVE_NOW
Hãy xem tài liệu tham khảo về cạnh /live_videos
để biết các thông số chuỗi truy vấn bổ sung mà bạn có thể thêm nhằm mô tả nội dung phát, chẳng hạn như phần mô tả và tiêu đề.
Khi thử nghiệm một lệnh gọi API, bạn có thể thêm thông số access_token
và đặt thông số này là mã truy cập của mình. Tuy nhiên, khi thực hiện lệnh gọi bảo mật từ ứng dụng của bạn, hãy sử dụng lớp mã truy cập.
Sau khi thành công, API sẽ tạo đối tượng LiveVideo
trên trang cá nhân của Người dùng này và trả về secure_stream_url
cũng như id
của đối tượng LiveVideo
. Nội dung phát sẽ hiển thị trong bài viết trên trang cá nhân của Người dùng ngay sau khi bạn gửi dữ liệu đến URL luồng bảo mật. Bạn có thể truy vấn đối tượng LiveVideo
để giám sát tình trạng của nội dung phát và kết thúc nội dung phát đó.
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..." }
Để phát trực tiếp video trên Page
, hãy lấy mã truy cập Trang của quản trị viên Trang có quyền pages_read_engagement
và pages_manage_posts
, rồi gửi yêu cầu đến:
POST /<PAGE_ID>/live_videos?status=LIVE_NOW
Hãy xem tài liệu tham khảo về cạnh /live_videos
để biết các thông số chuỗi truy vấn bổ sung mà bạn có thể thêm nhằm mô tả nội dung phát, chẳng hạn như phần mô tả và tiêu đề.
Khi thử nghiệm một lệnh gọi API, bạn có thể thêm thông số access_token
và đặt thông số này là mã truy cập của mình. Tuy nhiên, khi thực hiện lệnh gọi bảo mật từ ứng dụng của bạn, hãy sử dụng lớp mã truy cập.
Sau khi thành công, API sẽ tạo đối tượng LiveVideo
trên Trang này và trả về secure_stream_url
cũng như id
của đối tượng LiveVideo
. Nội dung phát sẽ hiển thị trong bài viết trên Trang ngay sau khi bạn gửi dữ liệu đến URL luồng bảo mật. Bạn có thể truy vấn đối tượng LiveVideo
để giám sát tình trạng của nội dung phát và kết thúc nội dung phát đó.
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..." }
Bạn có thể đọc đối tượng LiveVideo
để lấy URL xem trước của luồng phát trực tiếp và dữ liệu về tình trạng phát trực tiếp, chẳng hạn như tốc độ bit và tỷ lệ khung hình. Dữ liệu tình trạng phát trực tiếp sẽ làm mới 2 giây một lần. Do đó, hãy giới hạn truy vấn để không vượt quá 2 giây một lần. Hệ thống sẽ phát hiện và báo cáo hết thời gian chờ phát trực tiếp sau khi không nhận được dữ liệu nào trong 4 giây.
Để đọc đối tượng LiveVideo
, hãy lấy mã truy cập dành cho Người dùng hoặc mã truy cập Trang phù hợp có quyền publish_video
, rồi gửi truy vấn đến:
GET /<LIVE_VIDEO_ID>?fields=<COMMA_SEPARATED_LIST_OF_FIELDS>
Sử dụng thông số {fields}
để chỉ định các trường đối tượng LiveVideo mà bạn muốn nhận được. Ví dụ: sau đây là yêu cầu lấy ingest_streams
trên đối tượng LiveVideo
, có chứa dữ liệu về tình trạng phát trực tiếp:
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>" }
Thuộc tính phản hồi
Tên trường | Mô tả |
---|---|
audio_bitrate | Số bit/giây của luồng âm thanh đến. |
is_master |
|
secure_stream_url | URL thu thập dữ liệu RTMPS bảo mật dành cho ID Video trực tiếp đang được truy vấn. |
stream_url | URL thu thập dữ liệu RTMP dành cho ID Video trực tiếp đang được truy vấn. |
video_bitrate | Số bit/giây của luồng video đến. |
video_framerate | Số khung hình/giây của luồng video đến. |
video_gop_size | Kích thước GOP (nhóm ảnh) tính bằng mili giây. |
video_height | Chiều cao tính bằng pixel của khung hình video đến. |
video_width | Chiều rộng tính bằng pixel của khung hình video đến. |
Để kết thúc nội dung phát, hãy ngừng phát dữ liệu video trực tiếp từ bộ mã hóa của bạn sang URL luồng hoặc gửi yêu cầu đến:
POST /<LIVE_VIDEO_ID>?end_live_video=true
Thao tác này sẽ đặt trạng thái của đối tượng LiveVideo
là VOD
rồi lưu lại dưới dạng video theo yêu cầu (VOD) để có thể xem lại sau.
Sau khi thành công, API sẽ trả về ID của đối tượng LiveVideo
.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>?end_live_video=true"
{ "id": "10213570560993813" //<LIVE_VIDEO_ID> }
Bạn có thể thực hiện thao tác GET
trên ID LiveVideo để xác nhận rằng trạng thái của video đó đã được đặt là VOD
:
GET /<LIVE_VIDEO_ID>?fields=status
{ "status": "VOD", // Broadcast ended, saved as VOD "id": "10213570560993813" //<LIVE_VIDEO_ID> }
Để xóa nội dung phát đã kết thúc và lưu dưới dạng VOD, hãy gửi yêu cầu đến:
DELETE /<LIVE_VIDEO_ID>
curl -i -X DELETE \
"https://graph.facebook.com/v21.0
/<LIVE_VIDEO_ID>"
{ success: true }
Trước khi phát trực tiếp, hệ thống có thể cần chút thời gian trong khi chúng tôi giải mã dữ liệu phát trực tiếp ban đầu và xử lý bất kỳ yêu cầu API nào có liên quan. Do đó, người phát có thể khó biết được chính xác thời điểm bắt đầu nội dung phát. Để tránh vấn đề này, bạn có thể đặt đối tượng LiveVideo để chấp nhận dữ liệu phát nhưng không phát trực tiếp đến các đối tượng cho đến khi có thông báo RTMP phát trực tiếp trong chính dữ liệu phát. Cách này cho phép bất kỳ ai có thể xem trước nội dung phát đều xem phát trực tiếp được, đồng thời cho phép bộ mã hóa phát trực tiếp kiểm soát chính xác cả thời gian phát trực tiếp cho đối tượng lẫn khung hình đầu tiên mà đối tượng đó nhìn thấy.
Để bật tính năng phát trực tiếp chính xác theo khung hình, đầu tiên, hãy tạo đối tượng LiveVideo như bạn thường làm và đặt trạng thái của đối tượng này là PREVIEW (XEM TRƯỚC). Sau khi tạo, hãy truy vấn đối tượng LiveVideo và yêu cầu trường secure_stream_url kèm theo các trường lồng nhau sau đây:
secure_stream_url.inband_go_live(require_inband_signal)
Thao tác này sẽ bật tính năng phát trực tiếp chính xác theo khung hình trên đối tượng LiveVideo và API sẽ phản hồi bằng URL luồng bảo mật mới để bạn phát đến URL này. Bạn có thể bỏ qua URL luồng bảo mật ban đầu mà mình nhận được khi tạo đối tượng LiveVideo đầu tiên.
Nội dung phát sẽ phát trực tiếp và hiển thị cho đối tượng sau khi (1) bạn đặt trạng thái nội dung phát là LIVE (TRỰC TIẾP) (thông qua lệnh gọi API Đồ thị hoặc người dùng đăng từ Live Producer) và (2) bộ mã hóa gửi thông báo RTMP phát trực tiếp.
Gói tin AMF0 (loại 0x12) chứa:
onGoLive
timestamp
Để biết thêm thông tin, hãy xem quy cách của RTMP và AMF0.
Yêu cầu mẫu để bật tính năng phát trực tiếp chính xác theo khung hình trên 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 luồng bảo mật dành cho đối tượng LiveVideo đã bật tính năng phát trực tiếp chính xác theo khung hình.
{ "secure_stream_url": "rtmps://rtmp-pc.facebook.com:443/rtmp/LIVE_VIDEO_ID?s_bl=1&s_gl=1&...", "id": "LIVE_VIDEO_ID" }
Để lấy dữ liệu về mã lỗi liên quan đến nội dung phát, hãy gửi yêu cầu đến:
GET /<LIVE_VIDEO_ID>?fields=errors
API sẽ phản hồi bằng error code
, type
, message
và 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 | Tóm tắt lỗi | Mô tả |
---|---|---|
COPYRIGHT__LIVE_COPYRIGHT_VIOLATION | Vi phạm bản quyền trực tiếp | Video trực tiếp của bạn đã bị ngừng do có thể chứa nội dung âm thanh hoặc hình ảnh thuộc sở hữu của một Trang khác. |
VIDEO__CREATE_FAILED | Sự cố tải lên | Đã xảy ra sự cố và video của bạn không tải lên được. Vui lòng thử lại. |
LIVE_VIDEO__DELETE_FAILED | Không xóa được video trực tiếp | Đã xảy ra sự cố và chúng tôi không thể xóa video trực tiếp của bạn. Vui lòng thử lại. |
LIVE_VIDEO__EDIT_API_NOT_ALLOWED | Không được phép chỉnh sửa qua API Video trong khi phát trực tiếp | Không được phép chỉnh sửa video trực tiếp bằng API Chỉnh sửa video. Hãy sử dụng ID video trực tiếp. |
LIVE_VIDEO__LIVE_STREAM_ERROR | Luồng chung | Đã xảy ra lỗi trong luồng |
LIVE_VIDEO__NOT_EXIST | Video trực tiếp không tồn tại | Video trực tiếp mà bạn đang cố truy cập không tồn tại trong hệ thống nữa. |
LIVE_VIDEO__PRIVACY_REQUIRED | Cần cài đặt quyền riêng tư | Bạn cần phải đặt quyền riêng tư trước khi phát trực tiếp. |
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 |