Trường hợp sử dụng nâng cao

Nhắm mục tiêu đối tượng

Bao gồm và loại trừ đối tượng cụ thể khỏi quá trình xem Video trực tiếp.

Tạo Đối tượng mục tiêu

Nút

Trước khi bắt đầu

Để phát trực tiếp video trên Trang, bạn sẽ cần:

Để phát trực tiếp video trong một Nhóm, bạn sẽ cần:

Ví dụ

Gửi yêu cầu POST /id, trong đó id là ID video trực tiếp, và đặt trường thông tintargeting cũng như thông số của trường đó.

curl -i -X POST \
  "https://graph.facebook.com/LIVE_VIDEO_ID
    ?targeting={age_min:17, geo_locations:{countries:["US","CA","MX"]}}
    &access_token=ACCESS_TOKEN"
GraphRequest request = GraphRequest.newPostRequest(
  accessToken,
  "/LIVE_VIDEO_ID/",
  new JSONObject("{}"),
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/LIVE_VIDEO_ID/"
           parameters:@{ @"targeting": @"{age_min:17, geo_locations:{countries:["US","CA","MX"]}, excluded_zipcodes:{"key":"US:10001"}}",}
           HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/LIVE_VIDEO_ID/',
  'POST',
  {"targeting":"{age_min:17, geo_locations:{countries:[\"US\",\"CA\",\"MX\"]}, excluded_zipcodes:{\"key\":\"US:10001\"}}"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->post(
    '/LIVE_VIDEO_ID/',
    array (
      'targeting' => '{age_min:17, geo_locations:{countries:["US","CA","MX"]}, excluded_zipcodes:{"key":"US:10001"}}'
    ),
    'ACCESS_TOKEN'
  );
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();

Ví dụ về phản hồi

{ "targeting": { "age_max": 65, "age_min": 17, "geo_locations": { "countries": [ "US", "CA", "MX" ] } }, "id": "LIVE_VIDEO_ID" } 

Nhận thông tin về đối tượng mục tiêu

Nút

Trước khi bắt đầu

Để phát trực tiếp video trên Trang, bạn sẽ cần:

Để phát trực tiếp video trong nhóm, bạn sẽ cần:

  • Mã truy cập người dùng do quản trị viên của nhóm đó yêu cầu

Ví dụ

Gửi yêu cầu GET /id, trong đó id là ID video trực tiếp, có trường thông tin targeting.

GraphRequest request = GraphRequest.newGraphPathRequest(
  accessToken,
  "/LIVE_VIDEO_ID",
  new GraphRequest.Callback() {
    @Override
    public void onCompleted(GraphResponse response) {
      // Insert your code here
    }
});

Bundle parameters = new Bundle();
parameters.putString("fields", "targeting");
request.setParameters(parameters);
request.executeAsync();
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
    initWithGraphPath:@"/LIVE_VIDEO_ID"
           parameters:@{ @"fields": @"targeting",}
           HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
    // Insert your code here
}];
FB.api(
  '/LIVE_VIDEO_ID',
  'GET',
  {"fields":"targeting"},
  function(response) {
      // Insert your code here
  }
);
try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->get(
    '/LIVE_VIDEO_ID',
    'ACCESS_TOKEN'
  );
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();
curl -i -X GET \
  "https://graph.facebook.com/LIVE_VIDEO_ID
    ?fields=targeting&access_token=ACCESS_TOKEN"

Ví dụ về phản hồi

{ "targeting": { "age_max": 65, "age_min": 17, "geo_locations": { "countries": [ "US" "CA", "MX" ] } }, "id": "LIVE_VIDEO_ID" } 

Phát trực tiếp chính xác theo khung hình

Quá trình phát trực tiếp có thể chậm trễ một chút do chúng tôi phải giải mã dữ liệu phát trực tiếp ban đầu và xử lý mọi yêu cầu API liên quan. Điều này có thể khiến người phát trực tiếp khó biết chính xác khi nào buổi phát bắt đầu. Để tránh vấn đề này, bạn có thể đặt đối tượng LiveVideo ở chế độ chấp nhận dữ liệu phát trực tiếp nhưng chỉ phát trực tiếp cho các đối tượng khi có tin nhắn RTMP phát trực tiếp trong chính dữ liệu phát trực tiếp. Nhờ vậy, bất cứ ai có quyền xem trước buổi phát trực tiếp đều thấy được dữ liệu đó, đồng thời bộ mã hóa phát trực tiếp có thể kiểm soát chính xác cả thời gian phát trực tiếp cho một đố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, trước tiên, hãy tạo đối tượng LiveVideo như thường lệ rồi đặt trạng thái của đối tượng này thành XEM TRƯỚC. Sau khi tạo xong, hãy truy vấn đối tượng LiveVideo này và yêu cầu trường thông tin secure_stream_url bằng các trường thông tin lồng ghép sau đây:

secure_stream_url.inband_go_live(require_inband_signal)

Thao tác trên sẽ bật tính năng phát trực tiếp chính xác theo khung hình cho đối tượng LiveVideo và API sẽ trả về URL luồng an toàn mới mà bạn có thể phát trực tiếp lên đó. Bạn có thể bỏ qua URL luồng an toàn ban đầu mà mình nhận được khi tạo đối tượng LiveVideo lần đầu.

Nội dung sẽ phát trực tiếp và hiển thị với đối tượng sau khi (1) trạng thái phát trực tiếp được đặt thành TRỰC TIẾP (thông qua lệnh gọi API Đồ thị hoặc việc người dùng đăng từ Live Producer) (2) bộ giải mã gửi tin nhắn RTMP phát trực tiếp.

Cấu trúc tin nhắn RTMP phát trực tiếp

Gói AMF0 (kiểu 0x12) chứa:

  • chuỗi onGoLive
  • mảng ECMA (kiểu 0x08) chứa cặp khóa-giá trị duy nhất:
    • Khóa: chuỗi (kiểu 0x02) timestamp
    • Giá trị: số (kiểu 0x00): nhãn thời gian của khung video đầu tiên sẽ hiển thị công khai

Để biết thêm thông tin, hãy xem phần thông số của RTMPAMF0.

Ví dụ về yêu cầu

Ví dụ về yêu cầ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/v19.0/LIVE_VIDEO_ID?fields=secure_stream_url.inband_go_live(require_inband_signal)&access_token=12345..."

Ví dụ về phản hồi

URL luồng an toàn cho đối tượng LiveVideo có 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" }

Hộp thoại phát trực tiếp

Kể từ ngày 25/05/2021, Hộp thoại phát trực tiếp sẽ ngừng hoạt động. Để biết thêm thông tin, hãy xem Bài viết trên blog của chúng tôi.

Chúng tôi đã tạo plugin để quá trình tích hợp Live API diễn ra dễ dàng nhất có thể. Nhờ đó, bạn có thể xác thực với Facebook, xem trước buổi phát trực tiếp và mô tả buổi phát trực tiếp thông qua một cửa sổ bật lên trước khi phát trực tiếp. Hộp thoại này phù hợp nhất với các video phát trực tiếp từ phía máy khách. Quy trình tích hợp phụ trợ sẽ vẫn tiếp tục để sử dụng API trực tiếp.

Yêu cầu

Để khởi chạy cửa sổ bật lên với các biện pháp kiểm soát xác định nơi chuyển hướng phản hồi POST, hãy chèn mã sau.

<button id="liveButton">Create Live Stream To Facebook</button>
<script>
document.getElementById('liveButton').onclick = function() {
  FB.ui({
    display: 'popup',
    method: 'live_broadcast',
    phase: 'create',
}, function(response) {
    if (!response.id) {
      alert('dialog canceled');
      return;
    }
    alert('{your-stream-url}:' + response.secure_stream_url);
    FB.ui({
      display: 'popup',
      method: 'live_broadcast',
      phase: 'publish',
      broadcast_data: response,
    }, function(response) {
    alert("video status: \n" + response.status);
    });
  });
};
</script>
Thông số Giá trị Mô tả

display

popup, iframe

Cách hộp thoại mở trên trang web của bạn.

phase

create, publish

Hộp thoại trong giai đoạn tạo cho phép bạn lấy url luồng để tải video lên; Hộp thoại trong giai đoạn đăng sẽ cung cấp bản xem trước và nút phát trực tiếp. required

broadcast_data

Phản hồi object được trả về từ API hoặc giai đoạn create.

Thông số này là required cho giai đoạn publish.

Trong cửa sổ bật lên ở giai đoạn Tạo, hãy chọn trang đích cho buổi phát trực tiếp. Trang đích đó có thể ở trên bất cứ trang hoặc nhóm nào mà bạn quản lý. Phản hồi POST sẽ bao gồm các trường stream_urlsecure_stream_url. Một hoặc 2 trường này có thể tách thành URL máy chủ và khóa luồng.

URL máy chủ là nửa đầu của stream_url: rtmp://rtmp-api.facebook.com:80/rtmp/

Khóa luồng là nửa sau của stream_url: 10153307708286557?ds=1&a=AdrRKk4mOaqPbQdxDuk

Trường phản hồiGiai đoạnMô tả

id

create, publish

ID của video phát trực tiếp.

stream_url

create

Một url rtmp bao gồm máy chủ luồng và khóa luồng, được dùng để tải lên buổi phát trực tiếp.

secure_stream_url

create

Một url rtmps, url luồng với giao thức bảo mật.

status

publish

Giá trị chuỗi cho biết trạng thái phát trực tiếp.

Trong đoạn mã của mình, chúng tôi có một lệnh gọi alert với stream_url. Ứng dụng của bạn sẽ bắt đầu phát trực tiếp bằng stream_url. Ngay sau khi bắt đầu phát trực tiếp, bạn sẽ thấy bản xem trước nội dung phát xuất hiện trong cửa sổ bật lên của giai đoạn đăng. Với hộp thoại này, người dùng có thể chọn cài đặt quyền riêng tư mà không phải điều chỉnh thông số quyền riêng tư của yêu cầu, cũng như có thể đặt các thẻ chủ đề, tiêu đề và phần mô tả của Video trực tiếp.

Lưu ý: Nếu cửa sổ bật lên đăng ở trạng thái Offline, hãy đảm bảo rằng tường lửa của bạn hiện không chặn RTMP và mọi phần mềm Adblocker trên trình duyệt đều tắt.

Khi bạn nhấp vào Phát trực tiếp, hộp thoại sẽ đóng và trong một vài giây, buổi phát trực tiếp sẽ phát trên trang hoặc nhóm, theo trang đích đã chọn.

Siêu dữ liệu sẽ được đưa vào khung hình đầu tiên của video trực tiếp với thời gian bắt đầu chính xác theo khung hình. Bộ mã hóa có thể triển khai tính năng đếm ngược để thông báo cho nhà phát hành thời gian bắt đầu chính xác của video. Bạn cũng có thể bắt đầu và dừng video trên giao diện Facebook.