通用流並發

本文檔描述瞭如何使用心跳機制且不使用 DRM 將流並發限制為最終查看器。

簡介

Generic Stream Concurrency 允許您定義特定用戶可以同時觀看的視頻流的數量。限制流並發性可幫助您防止內容因盜用或不當共享憑據而被盜或非法觀看。

此功能是 Playback Restrictions 的一部分,它是 與 DRM 流並發的替代方案,後者是一種替代解決方案。

何時使用 GSC

Brightcove 提供了兩種管理並發的解決方案:

下表提供了兩者的比較,以幫助您決定哪種更適合您的情況。

流並發解決方案
通用流並發 流並發與 DRM
優點:
  • 不需要 DRM
  • 可以通過 API 列出活動流會話
優點
  • 無法從客戶端禁用它
  • 續訂機制對自定義實現是透明的
  • 更安全
缺點
  • 心跳從客戶端運行
  • 自定義實現需要集成心跳機制
缺點
  • 它需要許多 DRM 許可證
  • 無法列出特定用戶的所有活動會話

它是如何運作的

心跳

心跳是一種基於頻率請求特定用戶的活動會話的機制,以強制它在整個回放過程中是有效會話。可以為 Brightcove 網絡播放器和本機 SDK 播放器啟用心跳。

心跳的頻率定義了播放器進行中流檢查以查看是否仍然滿足播放條件的頻率。默認情況下,頻率設置為 1 分鐘,但可以更改。

阻塞流

當達到並發流的最大數量並且查看者或擁有其帳戶憑據的人嘗試打開其他流時,來自該用戶的任何被標識為不同流媒體位置的新流都將被阻止。

相關器標識符

相關器標識符用於定義觀眾流式傳輸位置。這個標識符的特點是:

  • 它應該足夠具體以關聯來自同一查看器的所有請求。如果相關器過於通用,它會將具有相同查看器 ID 的多個查看器存儲在一起,並將它們全部分組到同一個槽中。
  • 它應該在同一查看器的所有視頻視圖中保持一致。

當“相關器”不同時,它會嘗試為觀看者 ID 填充一個“槽”,這意味著如果在同一觀看期間該值發生變化,它將被視為不同的觀看者並阻止播放。

相關器在 JWT 中使用sid宣稱

實作

使用 Brightcove 網絡或 SDK 播放器

  1. 如果您希望更改心跳頻率的默認值(1 分鐘), 請聯繫支持人員
  2. 創建用於播放限制的 JWT

    需要以下聲明:

    • climit - 並發限制聲明表明有多少觀察者或流可以同時播放
    • uid - 查看器標識符用於關聯多個會話以強制流並發
    • sid - 相關器標識符定義觀眾的流媒體位置。

      範例:
      • Chrome MAC(鎘)HTML 5 - 1112223334
      • Apple iPad 第 7 代 10.2(Wi-Fi)- 2223334444
      • Apple Apple TV TBD Apple TV - 3334445555
      • Android DefaultWidevineL3Phone 安卓手機 - 1112224567
      • Firefox MAC(鎘)HTML 5 - 1112226754
      • Google Chromecast 流媒體棒 - 1112346677
  3. 使用 Brightcove 註冊 JWT 的公鑰。有關詳細信息,請參閱 使用身份驗證 API
  4. 在客戶端播放器上啟用通用流並發:請參閱下面 播放器中的實現
樣本JSON Web Token (JWT) 索賠
{
// account id: JWT is only valid for this account
"accid":"4590388311111",
// limit of concurrent users
"climit": 3,
// user id
"uid": "108.26.184.3_1634052241",
// correlator identifier
"sid": "Firefox MAC (Cadmium) HTML 5 - 1112346677"
}
}

注意事項

  • 當超過查看器的最大會話數時,將停止會話。會話停止所需的時間可能與心跳頻率一樣長。
  • 如果客戶端播放器連接不上服務器,會重試3次。如果仍然無法連接,播放將停止。

在播放器中的實現

需求

  • 通用流並發需要 Brightcove 網絡播放器 6.63.2 或更高版本。
  • 通用流並發需要 Brightcove iOS SDK 播放器 6.10.1 或更高版本。
  • 通用流並發需要 Brightcove Android SDK 播放器 6.17.2 或更高版本。

Brightcove 網絡播放器

Brightcove Player 中的通用流並發可以使用video_cloud.stream_concurrency播放器配置。

目前,Studio 中沒有此功能的專用 UI,因此必須使用 JSON 編輯器。配置看起來像這樣:

"stream_concurrency" : true
...
  "video_cloud": {
    "stream_concurrency": true,
    "policy_key": "BCpk..."
  },
  "player": {
    "template": {
      "name": "single-video-template",
      "version": "6.63.1"
    }
  },
...

如果此鍵/值對不存在於 JSON 中或值為 false,則不會為播放器啟用 GSC 功能。

在運行時設置 JWT

與 EPA 流並發限制功能類似,通用流並發取決於 JSON Web Token。

如上所述,為通用流並發配置播放器後,剩下的步驟是在運行時向播放器提供 JWT。這與使用 EPA 時的過程相同:

player.catalog.setBcovAuthToken('');
範例

添加 JWT 令牌後,最後一步是從 Playback API 請求數據並將其加載到播放器中。此示例演示如何獲取單個視頻:

// Set the authorization token.
  player.catalog.setBcovAuthToken('');
  
  // Initiate a catalog request. API selection will occur each time this
  // is called.
  player.catalog.get({id: '1', type: 'video'}).
    then(function(data) {
  
      // When the request is complete, you must load the returned metadata
      // and sources into the player.
      player.catalog.load(data);
    }).
    catch(function(error) {
      throw new Error(error);
    });

iOS

要為 iOS SDK 啟用 Generic Stream Concurrency 功能,您需要啟用該選項streamConcurrencyEnabled在你的playbackController .或者,您可以發送值sid .如果sid為空,該值將不會作為標頭髮送。

目標-C

self.playbackController.streamConcurrencyEnabled = YES;
// Optional. Set custom sid
self.playbackController.options ■ (?{ kBCOVAuthHeartbeatPropertyKeySessionld: G'sessionld" };

迅速

self.playbackController.streamConcurrencyEnabled ■ true
// Optional. Set custom sid
self.playbackController.options = [ kBCOVAuthHeartbeatPropertyKeySessionld: "sessionld" ]

有關詳細信息,請參閱 Brightcove Native Player for iOS Reference

Android

在您的播放器 Activity 的 onCreate 方法中,添加以下行:

brightcoveVideoView.setStreamConcurrencyEnabled(true);

在裡面onCreate方法為DID_SET_VIDEO事件,使用此代碼設置心跳標頭。請注意,此處使用的是用於檢索視頻的同一 JWT,並且應包括uid聲明(以及可選的,一個sid宣稱):

Map<String, String> requestHeaders = new HashMap<>();
requestHeaders.put(ConcurrencyClient.HEARTBEAT_VIDEO_HEADER_KEY, video.getId());
requestHeaders.put(ConcurrencyClient.HEARTBEAT_ACCOUNTID_HEADER_KEY, accountId);
requestHeaders.put(BrightcoveTokenAuthorizer.BRIGHTCOVE_AUTHORIZATION_HEADER_KEY, jwtToken);
brightcoveVideoView.setStreamConcurrencyRequestHeaders(requestHeaders);

有關詳細信息,請參閱 通用流並發 (GSC) 與適用於 Android 的本機 SDK 文檔。

通過 API 實現

無需使用 Brightcove 網絡播放器或 SDK 播放器,即可通過並發服務 API 實現此功能。有關其他詳細信息,請參閱 API 參考

並發服務 API 的基本 URL 是:

https://edge-gsc.api.brightcove.com

授權方法是通過發送的 JWT Authorization標頭:

Authorization: Bearer code translate="No">{token}

您的播放器/應用程序需要執行的基本邏輯如下圖所示:

並發邏輯
並發邏輯

API端點

會議
此端點用於創建帶有心跳的新流會話以進行並發管理:
/api/v1/accounts/{account_id}/sessions

方法:POST

請求正文:

{
  "video": "the_video_id"
}
活躍期
此端點允許您列出流會話以跟踪它們 - 如果您正在實現邏輯以決定在達到並發限制時停止哪個會話,則主要有用:
/api/v1/accounts/{account_id}/sessions

方法:POST

停止會話
此端點允許您停止流式傳輸會話 - 如果您正在實施邏輯來決定在新的播放請求超過並發限制時停止哪個會話,則可以使用此端點。此端點主要供後端使用,以在完成後刪除會話:
/api/v1/accounts/{account_id}/sessions

方法:DELETE