概要
iOS および Android 用の Brightcove ネイティブプレーヤー SDK によるオフライン再生により、パブリッシャーはコンテンツを安全に保ちながら、まったく新しい方法で視聴者にリーチできます。当社のSDKは、ダウンロード管理、オフラインカタログ管理、分析、DRM、もちろん再生など、複雑なオフライン再生の問題に対して、パワフルにシンプルなソリューションを提供します。
オフライン再生を使用すると、ユーザーは DRM で保護されたビデオコンテンツとクリア(暗号化されていない)ビデオコンテンツの両方をデバイスにダウンロードし、接続されていないときに視聴することができます。
要件
Brightcoveのネイティブプレーヤー SDK は、次のバージョンのオフライン再生をサポートしています。
Brightcoveのネイティブ SDK バージョン
- iOS 6.0.1以降用のネイティブ SDK
- Android5.0.3+用のネイティブSDK
デバイスOSのバージョン
- iOS 10.0+だけど10.3+がおすすめ
- Android 5.0+
セットアップ
開始するには、次の操作を行います。
- アカウントでオフライン再生を有効にするには、アカウントマネージャーにお問い合わせください。
- 動画を取り込むときは、必ず動的配信を使用してください。
- ダウンロードを有効にする各ビデオを準備します。
コンテンツ配信
ビデオのストリーミングは、Video Cloud のマルチビットレートストリーミング機能を利用し、ソースの帯域幅を検出し、デバイスに最高の品質を提供します。オフライン再生機能では、次のストリーミングタイプがサポートされています。
- Android :HTTP (DASH) を介した動的アダプティブストリーミング
- iOS :Apple HTTP Live Streaming (HLS)
セキュリティ
オフラインソリューションでは、ダウンロードしたコンテンツの保護を最重視しています。Brightcove Native Player SDKは、コンテンツがビューアに安全に保存されるようにするために、次の機能を提供します' デバイス:
DRM で保護されたコンテンツ
- DRM で保護されたコンテンツの場合、ネイティブ SDK は次のテクノロジを使用します。
- Android :Widevine モジュラー付きDASH
-
iOS :HLS with FairPlay
-
動画コンテンツは、コンテンツをダウンロードした端末とアプリでのみ視聴できます。
-
動画コンテンツは、特定の日時の有効期限までしか視聴できません。
ネイティブ SDK を使用すると、ユーザーはビデオをレンタルまたは購入できます。有効期限はレンタルに適用され、動画をダウンロードするためのネイティブ SDK API を使用して DRM ライセンスで設定されます。一方、Fastly トークンで設定された有効期限は、ストリーミングコンテンツに適用されます。
- クライアントに返されたビデオ URL は有効期限が切れ、他のユーザーが使用できなくなります。
すべてのコンテンツ
- アプリが削除されると、ダウンロードされたすべてのコンテンツが削除されます。
- アプリは、ローカルに保存されたコンテンツをいつでも削除できます。
ダウンロード管理
Brightcove Native Player SDK は、コンテンツを視聴者のデバイスにダウンロードする複雑さを処理し、ネイティブアプリケーションのプロセスを大幅に簡素化します。
- パブリッシャーは、ダウンロードするコンテンツのレンディション品質を選択できます。
- キャプションは、オフライン中にダウンロードして表示できます。
- ネイティブ SDK では、複数のオーディオトラックがサポートされています。追加トラックのダウンロードの詳細については、以下を参照してください。
機能性
ダウンロード管理をサポートするために、次の機能をアプリに追加できます。
コンテンツを表示する
ストリーミングまたはダウンロードできるコンテンツの一覧を表示します。
offline_enabled
ビデオのプロパティを true に設定すると、ネイティブ SDK はこのビデオをダウンロード可能としてマークします。
ビデオを準備する
ビデオをダウンロード可能としてマークするには、次の操作を実行する必要があります。
- アカウントでオフライン再生を有効にしていない場合は、アカウントマネージャーに連絡して、アカウントを有効にしてください。
-
ダウンロードするビデオごとに、次のいずれかの操作を行って、オフラインを有効にします。
ビデオクラウドスタジオを使う
Video Cloud Studio を使用してオフライン再生を有効にします。
CMS API を使用する
CMS API を使用して、 offline_enabled フィールドの値を true に設定することもできます。
カールを使用した例を次に示します。
curl --header "Authorization: Bearer $oauth_token" --request PATCH --data ' {"offline_enabled" : true} ' https://cms.api.brightcove.com/v1/accounts/your account id/videos/your video id
クリアなコンテンツで作業する場合は、コンテンツの表示方法に関するヒントについては、「ベストプラクティス」セクションを参照してください。
ダウンロードサイズを確認する
ダウンロードを要求する前に、ダウンロード用のデバイスストレージに十分な容量があることを確認することをお勧めします。ビデオのダウンロードの合計サイズの見積もりを取得するには、次の手順に従います。
- iOSの場合は、ダウンロードサイズを確認するのセクションオフライン再生に関するiOSアプリ開発者ガイド。
-
Android の場合、から OnDownloadstartet コールバックで見積もりを取得できます
DownloadEventListener
。イベントリスナーを設定する方法の例を次に示します。MediaDownloadable.DownloadEventListener downloadEventListener = new MediaDownloadable.DownloadEventListener() { //Your implementation. } OfflineCatalog catalog = new OfflineCatalog(context, eventEmitter, accountId, policyKey); catalog.addDownloadEventListener(downloadEventListener);
ローカルストレージ領域を表示する
現在のアイテムとキュー内のアイテムのダウンロードを完了するのに十分なローカルストレージがない場合は、ユーザーに通知します。
SDK は推定サイズと進行状況を提供するため、ダウンロードに十分な領域があるかどうかを判断できます。
ダウンロードステータスを表示
現在のダウンロードとその状態を表示します。
合計推定サイズ、現在のダウンロードステータス、およびダウンロードの進行状況情報の割合は SDK によって返されます。
ダウンロードを管理する
複数の動画をダウンロードする
ネイティブ SDK では、複数の動画をダウンロードキューに入れることができます。たとえば、ユーザーがシーズンの複数のエピソードをダウンロードでき、ネイティブ SDK は各アセットのダウンロードステータスを提供してプロセスを管理します。
セカンダリトラックのダウンロード (iOS)
iOS 13では、アップルはダウンロードの仕組みを変更しました。詳細については、 iOS App 開発者用ガイドの「ビデオのダウンロードとオフライン再生」ガイドを参照してください。
この変更により、iOS オフラインダウンロードサンプルアプリは、複数のオーディオトラックを含むビデオを再ダウンロードするように表示されることがあります。これは、ダウンロードの進行状況がトラックごとに与えられるためです。したがって、プログレスバーは追加のオーディオトラックごとにゼロから再び始まります。
ここではAVMediaSelectionOptions
、字幕と代替オーディオトラックの概要を以下に示します。字幕と代替オーディオトラックの追加
ダウンロードの合計を決定する
didProgressTo
1つのビデオトークンの合計ダウンロードを得る方法はありますか?
なしビデオオフルトークンの場合、集約されたダウンロードの進行状況の値はありません。アプリ開発者は、アセットのダウンロード数を決定します。最初のアセットのダウンロードは、メインビデオと優先されるオーディオトラックとテキストトラックです。通常、ダウンロードは最大であり、進行状況は 0.00 から 100.00 まで進みます。
ダウンロードリクエストに(アプリ開発者が明示的に要求した)追加のメディア選択が含まれている場合、合計ダウンロード時間は、メインビデオと優先メディア選択の合計時間と、追加のメディア選択の合計時間になります。UI で合計進行状況を表す場合は、すべてのダウンロードの合計が 100% になり、各メディア選択でスケールされたダウンロード時間が合計されるように、各ダウンロードのスケール値を選択します。
オブジェクトタイプの特定
didProgressTo
各イベントに関連するオブジェクトの種類(ビデオまたはテキストトラック)を特定する方法はありますか?
対応追加のダウンロードは Apple メディア選択オプションオブジェクト ( AVMediaSelectionOption
) であり、トラックではありません。ダウンロード中のメディア選択オブジェクトは、進行状況コールバックで識別されます。( bcovOfflineVideoManagerDelegate.h )
Apple には、メディア選択オプションの属性を調べるメソッドが用意されています。詳しくはアップルの avMediaSelectionOption を参照。
OfflinePlayerサンプルアプリケーションを実行すると、Xcodeデバッガコンソールにメタデータ値が表示されます(2つの英語オプションによって誤解されないでください-それは単なるサンプルアプリです)
OfflinePlayer[523:355259] AVMediaSelection option 0 | legible display name: English
OfflinePlayer[523:355259] AVMediaSelection option 0 | audible display name: English
OfflinePlayer[523:355259] AVMediaSelection option 1 | legible display name: English
OfflinePlayer[523:355259] AVMediaSelection option 1 | audible display name: English
DownloadManager コードでそれがどのように行われたかを見ることができます。
一時停止/再開/ダウンロードのキャンセル
ユーザーがコンテンツのダウンロードの一時停止、再開、キャンセルを許可します。
ユーザーが一時停止/再開した場合、またはダウンロードが中断された場合、ダウンロード機能は中断された場所から再開されます。たとえば、ダウンロード中にWi-Fi接続が失われ、再接続したときに中断した場所が再開されます。
ビデオのダウンロードをキャンセルすると、進行状況はすべて消去されます。
ローカルカタログ管理
Brightcoveのネイティブプレーヤー SDK は、ダウンロードしたローカルコンテンツの管理プロセスを簡素化します。
次の機能をアプリに追加して、ローカルカタログ管理をサポートできます。
ダウンロードしたコンテンツを表示
各ショー/シーズンのダウンロード済みエピソードをすべて表示します。
SDK は、ダウンロードされたすべてのコンテンツのメタデータと再生の詳細を返します。このメタデータには、動画のタイトル、説明、サムネイル、利用可能なキャプション、利用可能なオーディオトラックなどが含まれます。
オフライン再生に固有の新しいメタデータプロパティがあります。これには、次のようなものがあります。
DRM で保護されたコンテンツ
- トークン識別子
- ライセンスの有効期限
すべてのコンテンツ
- ダウンロードの開始時刻と終了時刻
- ダウンロードされたサムネイルの名前とそのファイル URL
- ダウンロードされたポスターの名前とそのファイル URL
- ビデオバンドルの相対および派生ファイル URL
その後、特定の実装に対して結果をフィルタリングできます。
ローカルコンテンツの削除
ユーザーがローカルストレージからコンテンツを削除できるようにします。
SDK は、メタデータおよび関連するアセットとともにビデオを削除するメソッドを公開します。
コンテンツの再生
ネイティブ SDK を使用すると、次の状況でコンテンツを再生できます。
- ダウンロード中にビデオを再生します。
- ダウンロード後にビデオを再生します。ダウンロードしたコンテンツは、デバイスがオフラインまたはオンラインのときにローカルで再生できます。オフラインビデオは、ローカルストレージからのみ再生できます。
- ビデオのオンラインバージョンをストリーミングする場合は、Playback サービスから新しいビデオオブジェクトを取得する必要があります。
アナリティクス
オフラインフローに関連するデータを測定するために、分析が導入されました。詳細については、「ネイティブ SDK を使用したオフライン再生に関する分析」ドキュメントを参照してください。
サンプル
次の表に、オフライン再生を開始する方法を示すコードサンプルへのリンクを示します。
サンプル アプリケーション | 説明 |
---|---|
iOSオフライン再生 | FairPlay 暗号化で保護されているものを含む HLS ビデオをダウンロードして再生します。開発者の詳細については、オフライン再生の iOS アプリ開発者ガイドを参照してください。 |
Androidオフライン再生 | Widevine暗号化で保護されているものを含む、ダッシュビデオをダウンロードして再生します。 |
よくある質問
以下に、いくつかの一般的な質問に対する回答があります。
DRM で保護されたコンテンツ
ユーザーはシステムクロックを変更して有効期限をバイパスできますか?
Android :絶対有効期限によって、ライセンスが有効になるまでの日付と時刻が決まります。これは、Widevine と Android DRM レイヤーによって強制されます。理論的には、AndroidのDRMレイヤーは、ユーザーが有効期限をバイパスするのを防ぐ必要があります。見つかった問題については、AndroidOSのリリースノートに記載されています。
iOS :ライセンスの有効期限はFairPlayによって強制されます。iOSは時計の変更などのすべてのチェックを処理します。アプリには、ライセンスの有効期限をチェックして、ライセンスの有効期限が切れていることをユーザーに警告するオプションがあります。これは、単に期限切れのビデオを再生し、再生エラーを受信するよりも望ましい場合があります。
アプリがバックグラウンドにある間、ライセンスとオフライン動画は読み込まれますか?
Android :対応通常、ライセンスはすぐにダウンロードされますが、アプリがバックグラウンドで実行されているときにライセンスをダウンロードすることもできます。
iOS :ライセンスの読み込みはフォアグラウンドで実行する必要があります。ライセンスをプリロードする方法があります。メインビデオコンテンツのダウンロードは、アプリがバックグラウンドにある間に発生する可能性があります。
すべてのコンテンツ
オフラインコンテンツのダウンロードに使用されるビデオフォーマットは何ですか?
Android :DRMで保護されたDASHまたは暗号化されていないDASH。
iOS :HLS蒸しかダウンロードのビットレートを指定して、特定のバリアントを使用できます。
ダウンロードした動画は、ユーザーがオンラインのときにローカルで再生するか、ストリーミングしますか?
ダウンロードしたビデオは、オンラインまたはオフラインで再生できますが、常にダウンロードしたビデオが使用されます。ビデオのオンラインバージョンを再生する場合は、プレイバックサービスから新しいビデオオブジェクトを取得する必要があります。オフラインビデオは、ローカルストレージからのみ再生できます。
ベストプラクティス
オフライン再生用のアプリを開発する際には、次のガイドラインを参考にしてください。
一時停止/キャンセルボタンの表示
ビデオのダウンロードが開始されると、一時停止ボタンとキャンセルボタンが表示されます。
Android:onDownloadStarted
でコールバックを呼び出す一環として、一時停止ボタンとキャンセルボタンを表示する必要がありますDownloadEventListener
。詳細については、オフライン再生サンプルアプリを参照してください。
iOS: オフライン再生用のアプリの作成方法の詳細については、 iOS アプリ開発者ガイドを参照してください。
クリアコンテンツを表示する
アカウントが DRM 対応でない場合、またはクリアなコンテンツで作業している場合、Brightcove ネイティブ SDK はサーバー側のライセンスリクエストを実行しません。したがって、クリアコンテンツはレンタルまたは購入可能とはみなされません。ほとんどの場合、明確なコンテンツについては、レンタルボタンと購入ボタンを非表示にして、代わりに単一のダウンロードボタンを表示することをお勧めします。
機能の有効化
料金について、アカウントでオフライン再生機能を有効にする方法については、アカウントマネージャーにお問い合わせください。
トラブルシューティング
以下のヒントは、動画をダウンロードする際の問題を調査するのに役立ちます。
ネットワークが遅いためにデバイスが処理できるよりも高いビットレートでアセットをダウンロードしようとすると、エラーが発生することがあります。
これを回避するには、コードを追加して、デバイスの機能をチェックし、低速接続のデバイスが高ビットレートのアセットのダウンロードを試みないようにすることができます。接続をスロットリングしながら実際のデバイスでテストし、 Charles プロキシツールを使用してネットワークトラフィックを表示できます。
Android
エラー処理の詳細については、「ネイティブ SDK for Android からのエラーメッセージ」ドキュメントを参照してください。これには、オフライン再生に関連するエラーメッセージも含まれます。
iOS
エラー処理の詳細については、ネイティブ SDK for iOS ドキュメントでのエラー処理を参照してください。
オフライン再生コードがエラーを受け取ると、それをキャッチしてNSErrorを投げます。根本的なエラーを取得するには、これを試すことができます:
NSError *underlyingError = initialError.userInfo[NSUnderlyingErrorKey];
詳細については、「 iOS アプリ開発者ガイド」の「オフライン再生」を参照してください。
既知の問題
ネイティブ SDK でのオフライン再生に影響する Android および iOS オペレーティングシステムの既知の問題の一覧については、「既知の問題」サポートドキュメントを参照してください。
注意事項と制限事項
ネイティブ SDK でサポートされているオフライン再生機能には、次の注意事項が適用されます。
広告
オフライン再生では、クライアント側とサーバー側の広告はサポートされません。
HLSe
HLSeコンテンツは、Android、iOS、またはtvOS用のBrightcove NativeSDKを使用したオフライン再生ではサポートされていません。
低消費電力モード
デバイスの低電力モードは、ダウンロードを含む特定の機能に影響を与える可能性があります。詳細については、以下を参照してください。
共有動画
共有ビデオは、元のビデオが可能な場合にのみ、オフラインで視聴できるようにダウンロードできます。このプロパティは元のビデオから継承され、共有ビデオに対してのみ変更することはできません。
音声のみ
ネイティブ SDK は、オフライン再生でオーディオのみのコンテンツをサポートします。ポスター画像またはカスタム画面のいずれでも、視聴者に表示される内容を制御します。
Android 用ネイティブ SDK VideoView
にはが必要で、iOS 用ネイティブ SDK にはが必要ですUIView
。このため、バックグラウンドオーディオはサポートされていません。つまり、ユーザーがアプリをバックグラウンドに送信しても、オーディオは再生されません。
Android:アプリの削除
アプリが削除されると、ダウンロードされたすべてのコンテンツが削除されます。これは、デフォルトの格納場所が上書きされない限り、真です。
iOS: AirPlay
セキュリティ機能として、オフラインの HLS ビデオを AirPlay デバイスにストリーミングして再生することはできません。AVFoundation
これはAppleによって制限であることが確認されています。