使用即時備援

備援群組可讓您將 2 個或更多的即時工作結合成單一串流,並具有自動容錯移轉功能,提供不中斷的可靠播放。本指南將逐步引導您建立備援群組、新增工作,以及使用即時 API 強制容錯移轉。

簡介

Brightcove Live 的冗餘功能通過創建一個備份流來幫助確保您的直播活動的可靠性能,如果第一個流停止工作,Live 將自動故障轉移到該備份流。

請注意,對Live API的所有請求都需要以下標頭:

API請求標頭
金鑰 價格 注意事項
X-API-KEY {您的API密鑰} 當您打開Brightcove Live帳戶時,應該已經提供了密鑰。
Content-Type 應用程式/json 從技術上講,content-type只有包含請求主體的寫入請求才需要標頭,但對讀取請求應該沒有害處。

創建您的現場工作

對於冗餘設置,您將需要創建2個或更多Brightcove Live Jobs。工作的唯一要求是它們是用相同的output設置。實現此目的的最簡單方法是創建一個具有所需輸出規格的作業,然後使用copy_outputs_from_job參數來創建額外的工作。

對於可以在其中創建這些作業的區域沒有限制,但是建議將它們放置在相對較近的位置。

創建實時作業後,請保留作業ID,以備後用。您將用於將這些作業添加到冗餘組的請求正文(請參見以下部分)將如下所示:

    [
      {
        "job_id": "0b76bc73f92f46dc917bbe5061c0c633"
      },
      {
        "job_id": "0ae5a4a71dc54b3181af0f98ee407c27"
      }
    ]

創建冗餘組

要創建冗餘組,您將提交POST請求:

    https://api.bcovlive.io/v1/redundantgroups

這是一個示例請求正文:

    {
      "ad_insertion": true,
      "processing_regions": ["us-west-2"],
      "storage_regions": ["us-west-2", "us-east-1"],
      "label": "Test RG",
      "live_dvr_sliding_window_duration": 1800
    }

下表包含請求正文的完整字段列表。在某些情況下,這些字段與用於創建實時作業的字段相同。見實時 API 參考有關字段的更多詳細信息。

創建冗餘組字段
欄位 類型 是否需要? 描述
ad_insertion 布林 可選的 如果此流應啟用SSAI,則設置為true
add_cdns 陣列 可選的 用於清單生成的其他CDN提供程序數組。對於提供的每個CDN,清單將相應地放在前面
drm 對象 可選的 尚未支援
encryption 對象 可選的 尚未支援
label 必需的 標識組的標籤
live_dvr_sliding_window_duration 整數 可選的
notifications 陣列 可選的 通知目標對像或字符串的數組
processing_regions 陣列 必需的 冗餘組的處理區域。這將確定哪些AWS區域將生成清單。建議將其與storage_regions和創建實時作業的區域匹配。
storage_regions 陣列 必需的 存儲區域中的媒體塊和播放列表將在S3中上傳到。建議將其與processing_regions和創建實時作業的區域匹配。
videocloud 對象 可選的 Video Cloud客戶可以選擇創建用於直播的視頻。

響應如下所示:

    {
      "id": "481ff4cf0bf74956bc2ec6e126588080",
      "processing_regions": [
          {
              "region": "us-west-2",
              "probability": 1
          }
      ],
      "storage_regions": [
          "us-west-2",
          "us-east-1"
      ],
      "jobs": [],
      "state": "standby",
      "label": "Test RG",
      "live_dvr_sliding_window_duration": 1800,
      "status": {
          "us-west-2": null
      },
      "ad_insertion": true,
      "outputs": {
          "playback_url": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/playlist.m3u8",
          "playback_url_dvr": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/playlist_dvr.m3u8",
          "ssai_playback_urls": {
              "26f8470f61374e608e27af9c1b3f7ff0": {
                  "playback_url": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/26f8470f61374e608e27af9c1b3f7ff0/playlist_ssaiM.m3u8",
                  "playback_url_dvr": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/26f8470f61374e608e27af9c1b3f7ff0/playlist_dvr_ssaiM.m3u8",
                  "description": "House Ads - 864b84f712ae40bca1510a8052b34312",
                  "type": "ads"
              }
      }
    }

獲取多餘的組

您可以通過提交一個GET請求:

https://api.bcovlive.io/v1/redundantgroups

您可以使用state參數。允許的值為:

  • cancelled
  • cancelling
  • deleting
  • disconnected
  • failed
  • finished
  • finishing
  • processing
  • standby
  • waiting

還有一個page_size可以設置為最大 1000 的整數的參數。默認值page_size是 10。

響應將如下所示:

{
  "redundant_groups": [
    {
      "id": "91c268a6ec5240d79a6004f4ccf0dc6f",
      "account_id": "a95ac581551b4478b27910e5675db1f8",
      "user_id": "c2691d4d039040be96c190a949d754a7",
      "processing_regions": [
        {
          "region": "us-west-2",
          "probability": 1
        }
      ],
      "storage_regions": [
        "us-west-2",
        "us-east-1"
      ],
      "jobs": [],
      "state": "standby",
      "created_at": 1594316624287,
      "updated_at": 1594316624287,
      "label": "Test Redundant Group",
      "live_dvr_sliding_window_duration": 86400,
      "status": {
        "us-west-2": null
      },
      "outputs": {
        "playback_url": "https://bcovlive-a.akamaihd.net/r91c268a6ec5240d79a6004f4ccf0dc6f/us-west-2/NA/playlist.m3u8",
        "playback_url_dvr": "https://bcovlive-a.akamaihd.net/r91c268a6ec5240d79a6004f4ccf0dc6f/us-west-2/NA/playlist_dvr.m3u8"
      }
    },
    {
      "id": "279ac36e4b4d48a3abbd3e1f98cd57aa",
      "account_id": "a95ac581551b4478b27910e5675db1f8",
      "user_id": "c2691d4d039040be96c190a949d754a7",
      "processing_regions": [
        {
          "region": "us-west-2",
          "probability": 1
        }
      ],
      "storage_regions": [
        "us-west-2",
        "us-east-1"
      ],
      "jobs": [],
      "state": "standby",
      "created_at": 1594323207015,
      "updated_at": 1594323207015,
      "label": "Test Redundant Group2",
      "live_dvr_sliding_window_duration": 86400,
      "status": {
        "us-west-2": null
      },
      "outputs": {
        "playback_url": "https://bcovlive-a.akamaihd.net/r279ac36e4b4d48a3abbd3e1f98cd57aa/us-west-2/NA/playlist.m3u8",
        "playback_url_dvr": "https://bcovlive-a.akamaihd.net/r279ac36e4b4d48a3abbd3e1f98cd57aa/us-west-2/NA/playlist_dvr.m3u8"
      }
    }
  ]
}

將實時作業添加到冗餘組

創建冗餘組後,您可以通過發送POST請求:

    https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/jobs

實時作業ID是在請求正文中指定的,如下所示:

    [
      {
        "job_id": "0b76bc73f92f46dc917bbe5061c0c633"
      },
      {
        "job_id": "0ae5a4a71dc54b3181af0f98ee407c27"
      }
    ]

作業對像還有幾個其他可選屬性-下表顯示了所有字段:

添加現場作業請求字段
欄位 類型 是否需要? 描述
job_id 必需的 要添加到組的作業ID。如果兩者都不是playlist或者streams被指定,所有outputs將會被使用。
playlist 可選的 播放列表的標籤,用作流的輸出。如果playlist被定義為,streams必須不明確的 .
streams 陣列 可選的 流標籤列表,用作流的輸出。如果streams被定義為,playlist必須不明確的 .

此請求的成功響應將僅返回冗餘組ID。

獲取冗餘組狀態

您可以通過提交一個冗餘組的狀態GET請求:

    https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}

響應將如下所示:

    {
      "id": "481ff4cf0bf74956bc2ec6e126588080",
      "processing_regions": [
          {
              "region": "us-west-2",
              "probability": 1
          }
      ],
      "storage_regions": [
          "us-west-2",
          "us-east-1"
      ],
      "jobs": [
          {
              "job_id": "0b76bc73f92f46dc917bbe5061c0c633",
              "streams": [
                  "hls720p",
                  "hls540p",
                  "hls360p"
              ],
              "state": "processing"
          },
          {
              "job_id": "0ae5a4a71dc54b3181af0f98ee407c27",
              "streams": [
                  "hls720p",
                  "hls540p",
                  "hls360p"
              ],
              "state": "processing"
          }
      ],
      "state": "processing",
      "created_at": 1568057414849,
      "updated_at": 1568059153017,
      "label": "Test RG",
      "live_dvr_sliding_window_duration": 1800,
      "status": {
          "us-west-2": {
              "SwitchDrift": 0,
              "Ended": false,
              "OnAir": "0b76bc73f92f46dc917bbe5061c0c633",
              "Mode": "auto",
              "InManifest": true,
              "MediaSequence": 10,
              "Healthiness": 0,
              "Duration": 4,
              "DiscontinuitySequence": 1,
              "SourceChunk": {
                  "MediaSequence": 3639,
                  "Duration": 4,
                  "DiscontinuitySequence": 0,
                  "ProgramDateTime": "2019-09-09T19:59:36Z",
                  "LiveJobID": "0b76bc73f92f46dc917bbe5061c0c633"
              },
              "UpdatedAt": "2019-09-09T19:59:46Z",
              "ProgramDateTime": "2019-09-09T19:59:36Z"
          }
      },
      "ad_insertion": true,
      "outputs": {
          "playback_url": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/playlist.m3u8",
          "playback_url_dvr": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/playlist_dvr.m3u8",
          "ssai_playback_urls": {
              "26f8470f61374e608e27af9c1b3f7ff0": {
                  "playback_url": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/26f8470f61374e608e27af9c1b3f7ff0/playlist_ssaiM.m3u8",
                  "playback_url_dvr": "https://playback-qa.a-live.io/r481ff4cf0bf74956bc2ec6e126588080/us-west-2/NA/26f8470f61374e608e27af9c1b3f7ff0/playlist_dvr_ssaiM.m3u8",
                  "description": "House Ads - 864b84f712ae40bca1510a8052b34312",
                  "type": "ads"
              }
          }
      }
    }

冗餘組中的每個處理區域都有自己的status對象,按區域鍵控。你可以在這個例子中看到,在us_west_2加工區,on_air工作是0b76bc73f92f46dc917bbe5061c0c633 .

作為旁注,probability與處理區域相關聯的將在這一點上始終是1,但包含在未來增強的數據模型中,這將允許多個處理區域的概率在 0 和 1 之間,表示將使用該區域的播放流量的近似百分比。

手動添加提示點

手動將提示點添加到實時流中具有冗餘性與將提示點添加到普通實時流中非常相似。要為冗餘組執行此操作,請創建一個POST請求:

    https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/cuepoint

包括如下的請求正文:

    {
      "ad_server_data": {
        "subject": "wildlife"
      },
      "duration": 30,
      "timecode": "09:23:18:05"
    }

如果你省略timecode字段,將立即插入提示點。

強製作業故障轉移

故障轉移將由Brightcove Live系統自動管理,不需要您的任何干預。但是,如果由於某種原因你想強制故障轉移到另一個工作,最簡單的方法就是簡單地停止編碼器on_air工作。

您還可以使用 API 強制進行故障轉移,方法是PUT請求:

    https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/switch

請求正文如下所示:

    {
      "mode": "manual",
      "on_air": "0ae5a4a71dc54b3181af0f98ee407c27"
    }

這裡,mode將是manual或者auto(默認值),以及on_air將具有以下值之一次要的作業編號。

注意:曾在manual模式,自動作業故障轉移將不是發生。你必須將模式設置回auto以恢復自動故障轉移。您可以通過從正文中省略模式並添加 force 查詢參數來更改直播作業而無需切換到手動?force=true根據您的要求。這將強制服務切換作業,但如果檢測到問題,它可能會隨時切換回去。

結束冗餘流

您可以通過兩種方式結束冗餘流。按照設計,冗餘組是隱式的九月溪流。您可以將冗餘組放入STANDBY通過從冗餘組中刪除所有作業來模式。

為此,請使用DELETE請求:

    https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}/jobs/{job_id}

對於您要刪除的每個作業。請注意,為了刪除當前的作業on_air , 你必須添加?force=true查詢參數。

結束流的第二種方法是通過發送一個完全刪除冗餘組DELETE請求:

    https://api.bcovlive.io/v1/redundantgroups/{redundant_group_id}

限制

  • 直播冗餘 不能 用於受 DRM 保護的直播流。