Luồng dự phòng

Bạn có thể truyền đồng thời dữ liệu video trực tiếp dự phòng đến một buổi phát video trực tiếp. Nếu không phát được luồng chính, chúng tôi sẽ tự động chuyển sang luồng dự phòng để buổi phát video trực tiếp của bạn vẫn có thể tiếp tục mà không bị gián đoạn. Buổi phát đó sẽ vẫn sử dụng luồng dự phòng trừ khi bạn chuyển về luồng chính theo cách thủ công hoặc luồng chính đã tiếp tục phát trong khi luồng dự phòng không phát được.

Để sử dụng luồng dự phòng cùng với buổi phát video trực tiếp, bạn phải bật tính năng phát dự phòng khi tạo đối tượng LiveVideo của nội dung phát hoặc bật tính năng này trên đối tượng LiveVideo trước khi đối tượng nhận dữ liệu phát.

Bật tính năng phát dự phòng khi tạo LiveVideo

Để bật tính năng phát dự phòng khi bạn tạo đối tượng LiveVideo của nội dung phát, hãy thêm thông số chuỗi truy vấn enable_backup_ingest=true vào truy vấn của bạn.

Ví dụ: để tạo LiveVideo khi bật tính năng phát dự phòng cho một Người dùng:

POST /{user-id}/live_videos
  ?status=LIVE_NOW
  &enable_backup_ingest=true
  &access_token={access-token}

Truy vấn này sẽ trả về 2 URL, 1 cho luồng chính và 1 cho luồng dự phòng (luồng phụ):

{
  "id": "{live-video-id}",
  "stream_url": "{stream-url}",
  "secure_stream_url": "{secure-stream-url}",
  "stream_secondary_urls": [
    "{stream-secondary-urls}"
  ],
  "secure_stream_secondary_urls": [
    "{secure-stream-secondary-urls}"
  ]
}

Sử dụng secure_stream_url cho luồng thu thập dữ liệu chính và secure_stream_secondary_urls cho luồng thu thập dữ liệu dự phòng. Bạn có thể truyền dữ liệu dự phòng đến đối tượng LiveVideo bất cứ lúc nào trong quá trình phát.

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

curl -i -X POST \
  "https://graph.facebook.com/362629830945302/live_videos
    ?enable_backup_ingest=true
    &access_token=EAAI4b..."

Phản hồi mẫu

{
  "id": "10215840463339953",
  "stream_url": "rtmps://rtmp.facebook.com/rtmp/10215840463339953?s_bl=1&s_l=1&s_sml=3&s_sw=0&s_vt=api&a=AbxMhT-cq73GTdpuPLo",
  "secure_stream_url": "rtmps://rtmp.facebook.com/rtmp/10215840463339953?s_bl=1&s_l=1&s_sml=3&s_sw=0&s_vt=api&a=AbxMhT-cq73GTdpuPLo",
  "stream_secondary_urls": [
    "rtmp://rtmps.facebook.com/rtmp/10215840463339953?s_bl=1&s_l=1&s_sml=3&s_sw=1&s_vt=api&a=AbzhD2fKJw1Uw7JQjFc"
  ],
  "secure_stream_secondary_urls": [
    "rtmps://rtmps.facebook.com/rtmp/10215840463339953?s_bl=1&s_l=1&s_sml=3&s_sw=1&s_vt=api&a=AbzhD2fKJw1Uw7JQF80"
  ]
}

Bật tính năng phát dự phòng trên đối tượng LiveVideo hiện có

Bạn có thể bật tính năng phát dự phòng trên đối tượng LiveVideo hiện có, miễn là đối tượng này chưa nhận bất kỳ dữ liệu phát video trực tiếp nào. Để làm vậy, hãy gửi yêu cầu POST đến cạnh /input_streams của LiveVideo. Ví dụ:

POST /{live-video-id}/input_streams
  &access_token={access-token}

Thao tác này sẽ trả về ID của LiveVideo:

{
  "id": "{live-video-id}"
}

Sau khi bật, bạn có thể [lấy URL của luồng chính và luồng dự phòng] từ đối tượng LiveVideo.

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

curl -i -X POST \
  "https://graph.facebook.com/10215840463339953/input_streams
    &access_token=EAAI4b..."

Phản hồi mẫu

{
  "id": "10215840463339953"
}

Chuyển thủ công giữa các luồng

Bạn có thể chuyển thủ công giữa luồng chính và luồng dự phòng của LiveVideo bằng cách gửi yêu cầu đến:

POST /{live-video-id}
  ?master_ingest_stream_id={master-ingest-stream-id}
  &access_token={access-token}

Giá trị {master-ingest-stream-id} là một boolean; 0 biểu thị luồng thu thập dữ liệu chính, còn 1 biểu thị luồng thu thập dữ liệu dự phòng.

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

curl -i -X POST \
  "https://graph.facebook.com/10215840463339953
    ?master_ingest_stream_id=1
    &access_token=EAAI4b..."

Lấy URL của luồng chính và luồng dự phòng

Bạn có thể đọc trường ingest_streams của LiveVideo để lấy các URL của luồng chính và luồng dự phòng:

GET /{live-video-id}
  ?fields=ingest_streams
  &acess_token={access-token}

Thao tác này sẽ trả về tình trạng của luồng thu thập dữ liệu, cũng như các URL của luồng chính và luồng dự phòng (nếu có) trên LiveVideo:

{
  "ingest_streams": [
    {
      "stream_id": "{stream-id}",
      "stream_url": "{stream-url}",
      "secure_stream_url": "{secure-stream-url}",
      "is_master": {is-master},
      "stream_health": {stream-health},
      "id": "{id}"
    },
    {
      "stream_id": "{stream-id}",
      "stream_url": "{stream-url}",
      "secure_stream_url": "{secure-stream-url}",
      "is_master": {is-master},
      "stream_health": {stream-health},
      "id": "{id}"
    }
  ],
  "id": "10215840874550233"
}

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

curl -i -X GET \
 "https://graph.facebook.com/10215840463339953
   ?fields=ingest_streams
   &access_token=EAAI4b..."

Phản hồi mẫu

{
  "ingest_streams": [
    {
      "stream_id": "0",
      "stream_url": "rtmps://live-api.facebook.com/rtmp/10215840874550233?s_bl=1&s_l=1&s_sml=3&s_sw=0&s_vt=api&a=AbyvsHKGRrur_sZOeuo",
      "secure_stream_url": "rtmps://live-api.facebook.com/rtmp/10215840874550233?s_bl=1&s_l=1&s_sml=3&s_sw=0&s_vt=api&a=AbyvsHKGRrur_sZOF08",
      "is_master": true,
      "stream_health": {
        "video_bitrate": 2304481.75,
        "video_framerate": 27.586206436157,
        "video_gop_size": 2000,
        "video_height": 700,
        "video_width": 1120,
        "audio_bitrate": 118149.8828125
      },
      "id": "10215840874630235"
    },
    {
      "stream_id": "1",
      "stream_url": "rtmps://live-api.facebook.com/rtmp/10215840874550233?s_bl=1&s_l=1&s_sml=3&s_sw=1&s_vt=api_dev&a=AbySai39Wr08FKpUYw0",
      "secure_stream_url": "rtmps://live-api.facebook.com/rtmp/10215840874550233?s_bl=1&s_l=1&s_sml=3&s_sw=1&s_vt=api_dev&a=AbySai39Wr08FKpUv3M",
      "is_master": false,
      "stream_health": {
        "video_bitrate": 1866942.625,
        "video_framerate": 22.338048934937,
        "video_gop_size": 2000,
        "video_height": 700,
        "video_width": 1120,
        "audio_bitrate": 95675.3515625
      },
      "id": "10215840874670236"
    }
  ],
  "id": "10215840874550233"
}