はじめに
デフォルトでは、ネイティブSDKはBrightcove Playback APIと通信して、ビデオおよびプレイリストのコンテンツを取得します。再生権限と制限を管理する新しいシステムは、Playback APIの前に配置され、DRMライセンスを使用して再生認証を提供します。
DRMの有無にかかわらず再生権を使用できますが、ランタイム制限を使用する場合は、JSON Web Token(JWT)を使用する必要があります。
License Keys Protectionは、Dynamic DeliveryでDRM保護またはHTTP Live Streaming Encryption(HLSe)コンテンツを使用する場合に、追加のセキュリティレベルを提供します。ライセンスリクエストは、署名されたJSON Web Token(JWT)を使用して認証できます。
JWTは、ビデオがプレーヤーにロードされ、ソースが選択されると、ビデオライセンスをリクエストするときに使用されます。
この機能の詳細については、以下を参照してください。
要件
再生制限を使用するには、Brightcove Native SDKの次のバージョンが必要です。
- Android: Android用ネイティブSDKバージョン6.11.0以降
- iOS: iOS用ネイティブSDKバージョン6.7.0以降
追加機能
再生制限の使用に関する追加機能は次のとおりです。
- Android: Android用ネイティブSDKバージョン7.1.3でライブHLSeライセンスキー保護のサポートを修正
- iOS: iOS用ネイティブSDKバージョン6.10.5でライブHLSeライセンスキー保護のサポートを追加
仕組み
再生制限は、次のようなソリューション全体を指します。
- 再生権
- ライセンスキー保護
再生権
デフォルトでは、ネイティブSDKは、ポリシーキーがある場合、Playback APIへのリクエストを行います。SDKはリクエストを次のエンドポイントに送信し、コンテンツを取得します。
edge.api.brightcove.com
Playback APIリクエストで再生権をチェックするには、ポリシーキーを含めません。ポリシーキーがない場合、SDKはリクエストを次のエンドポイントに送信します。
edge-auth.api.brightcove.com
再生権に関連するすべてのチェックに合格すると、コンテンツが返されます。
ライセンスキー保護
DRMまたはHLSeコンテンツ保護は、ライセンス/キーリクエストを使用します。これにより、JSON Web Token(JWT)を使用して、すべてのストリームリクエストを保護できます。
Playback APIへのリクエストにはポリシーキーが含まれ、SDKはリクエストを次のエンドポイントに送信します。
edge.api.brightcove.com
Android:再生権の使用
再生権をチェックするPlayback APIリクエストを行うには、次の手順に従います。
-
基本サンプルアプリから始めます。
-
ポリシーキーなしでCatalog Builderパターンを使用します。
Catalog catalog = new Catalog.Builder(eventEmitter, account).build();Brightcoveサンプルアプリをフォローしている場合は、次のようにアカウントIDを取得します。
String account = getString(R.string.account); -
オプション:ランタイム制限を使用する場合は、JWTを作成してカタログリクエストで渡す必要があります。
- JWTを作成します。詳細については、概要:Brightcove再生制限ドキュメントを参照してください。
HttpRequestConfigでJWTを設定して、カタログリクエストでJWTを渡します。詳細については、Android:ライセンスキー保護の使用セクションを参照してください。
Android:ライセンスキー保護の使用
Android用ネイティブSDKは現在、HLSeおよびWidevine DASHソースのキー/ライセンス保護をサポートしています。単一のビデオまたはプレイリストのBrightcoveカタログリクエストの一部として認証トークンを提供します。
Brightcoveカタログリクエストを行うには、次の手順に従います。
-
HttpRequestConfigオブジェクトを作成し、Brightcove Authorization TokenをJSON Web Tokenの値に設定します。HttpRequestConfig httpRequestConfig = new HttpRequestConfig.Builder() .setBrightcoveAuthorizationToken("your jwt") .build(); -
HttpRequestConfigオブジェクトで次のいずれかのCatalogメソッドを使用します。ビデオリクエストの場合は、次のいずれかを使用します。
findVideoByID(String, HttpRequestConfig, VideoListener)findVideoByReferenceID(String, HttpRequestConfig, VideoListener)プレイリストリクエストの場合は、次のいずれかを使用します。
findPlaylistByID(String, HttpRequestConfig, PlaylistListener)findPlaylistByReferenceID(String, HttpRequestConfig, PlaylistListener)HLSeおよびWidevineライセンス取得のトークン使用の詳細は、SDKによって処理されます。
コード例
Catalogリクエストを行う際に認証トークンを渡す方法の例を次に示します。
String myToken = "your jwt";
HttpRequestConfig httpRequestConfig = new HttpRequestConfig.Builder()
.setBrightcoveAuthorizationToken(myToken)
.build();
...
Catalog catalog = new Catalog.Builder(eventEmitter, account)
.setPolicy(getString(R.string.policy))
.build();
catalog.findVideoByReferenceID(videoReferenceId, httpRequestConfig, new VideoListener(){...});
オフライン再生
OfflineCatalogのfindVideo、requestPurchaseLicense、およびrequestRentalLicenseメソッドはすべて、HttpRequestConfigを引数として受け取ります。
例を次に示します。
private HttpRequestConfig httpRequestConfig;
private String myToken = "your jwt";
...
HttpRequestConfig.Builder httpRequestConfigBuilder = new HttpRequestConfig.Builder();
httpRequestConfigBuilder.setBrightcoveAuthorizationToken(myToken);
httpRequestConfig = httpRequestConfigBuilder.build();
playlist.findPlaylist(catalog, httpRequestConfig, new PlaylistListener() {
@Override
public void onPlaylist(Playlist playlist) {
videoListAdapter.setVideoList(playlist.getVideos());
onVideoListUpdated(false);
brightcoveVideoView.addAll(playlist.getVideos());
}
@Override
public void onError(String error) {
String message = showToast("Failed to find playlist[%s]: %s", playlist.displayName, error);
Log.w(TAG, message);
onVideoListUpdated(true);
}
});
詳細については、オフライン再生サンプルアプリを参照してください。
配信ルールでのライセンスキー保護
ライセンスキー保護を配信ルールと組み合わせるには、HttpRequestConfig.Builderを次のように設定します。
- Brightcove Authorization Token(JWT)を設定
- Delivery Rule Config IDを設定
結果のBuilder設定は次のようになります。
HttpRequestConfig httpRequestConfig = new HttpRequestConfig.Builder()
.addQueryParameter(HttpRequestConfig.KEY_DELIVERY_RULE_CONFIG_ID, "your rules id")
.setBrightcoveAuthorizationToken("your jwt")
.build();
応答
ライセンスキー保護には次の応答が関連付けられています。
- 200 - ライセンスの続行が許可されています
- 401 - ライセンス配信の続行を許可してはなりません
iOS:再生権の使用
再生権をチェックするPlayback APIリクエストを行うには、次の手順に従います。
-
基本サンプルアプリから始めます。
-
BCOVPlaybackServiceのインスタンスを作成し、Policy Keyをnilに設定します。let playbackService = BCOVPlaybackService(accountId: kViewControllerAccountID, policyKey: nil) -
オプション:ランタイム制限を使用する場合は、JWTを作成してカタログリクエストで渡す必要があります。
- JWTを作成します。詳細については、概要:Brightcove再生制限ドキュメントを参照してください。
- カタログリクエストでJWTを渡します。詳細については、iOS:ライセンスキー保護の使用セクションを参照してください。
iOS:ライセンスキー保護の使用
ライセンスキー保護を使用する場合は、JSON Web Token(JWT)を渡すことができる再生サービスメソッドを使用する必要があります。これはauthTokenパラメータを使用して行われます。
ビデオリクエストの場合は、次のいずれかを使用します。
- (void)findVideoWithConfiguration:(NSDictionary *)configuration queryParameters:(NSDictionary *)queryParameters completion:(void (^)(BCOVVideo *video, NSDictionary *jsonResponse, NSError *error))completionHandler;
- (void)findVideoWithReferenceID:(NSString *)referenceID authToken:(NSString *)authToken parameters:(NSDictionary *)parameters completion:(void (^)(BCOVVideo *video, NSDictionary *jsonResponse, NSError *error))completionHandler;
プレイリストリクエストの場合は、次のいずれかを使用します。
- (void)findPlaylistWithConfiguration:(NSDictionary *)configuration queryParameters:(NSDictionary *)queryParameters completion:(void (^)(BCOVVideo *video, NSDictionary *jsonResponse, NSError *error))completionHandler;
- (void)findPlaylistWithReferenceID:(NSString *)referenceID authToken:(NSString *)authToken parameters:(NSDictionary *)parameters completion:(void (^)(BCOVPlaylist *playlist, NSDictionary *jsonResponse, NSError *error))completionHandler;
HLSeおよびFairPlayライセンス取得のトークン使用の詳細は、SDKによって処理されます。
詳細については、iOS用ネイティブSDKリファレンスのPlayback Authorization Serviceセクションを参照してください。
オフライン再生
オフライン再生でPlayback Authorization Serviceを使用している場合、認証トークンを受け入れるFairPlayライセンスを更新するための新しいメソッドがあります。
// Request license renewal
[BCOVOfflineVideoManager.sharedManager renewFairPlayLicense:offlineVideoToken
video:video // recent video from Playback API or Playback Service class
authToken: authToken
Parameters: parameters
completion:^(BCOVOfflineVideoToken offlineVideoToken, NSError *error)
{
// handle errors
}];
ライセンスの更新が完了すると、渡されたのと同じオフラインビデオトークンで完了ブロックが呼び出されます。NSErrorは発生した問題を示します(エラーがない場合はnil)。
詳細については、iOS用ネイティブSDKリファレンスのRenewing a FairPlay Licenseセクションを参照してください。
配信ルールでのライセンスキー保護
ライセンスキーでビデオコンテンツを保護するには、findVideoWithConfiguration:queryParameters:completion:メソッドを使用します。
このメソッドは、設定ディクショナリを使用してビデオIDを指定します。クエリパラメータをディクショナリとして渡し、完了ブロックを処理してビデオ再生を管理します。
コード例を次に示します。
- (void)requestContentFromPlaybackService
{
NSDictionary *configuration = @{kBCOVPlaybackServiceConfigurationKeyAssetID: kViewControllerVideoID};
[self.playbackService findVideoWithConfiguration:configuration queryParameters:nil completion:^(BCOVVideo *video, NSDictionary *jsonResponse, NSError *error) {
if (video)
{
[self.playbackController setVideos:@[ video ]];
}
else
{
NSLog(@"ViewController Debug - Error retrieving video playlist: `%@`", error);
}
}];
}
応答
ライセンスキー保護には次の応答が関連付けられています。
- 200 - ライセンスの続行が許可されています
- 401 - ライセンス配信の続行を許可してはなりません