此頁面已移動 - 您將在 3 秒內轉到 新位置 。請更新您的書籤!

使用即時備援

備援群組可讓您將 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=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 保護的直播流。