概要
Google キャストテクノロジを使用すると、モバイルデバイスからハイビジョンテレビや家庭用オーディオシステムへのストリーミング動画コンテンツを開始および制御できます。アプリから [キャスト] ボタンをタップして、大画面でコンテンツをストリーミングします。
キャストアプリケーションを構築するには、次のコンポーネントが必要です。
-
送信者アプリケーション -これはモバイルデバイス上に存在し、受信デバイスを検出し、安全な接続を確立し、コンテンツをミラーリングします。送信者アプリは、Chromecast デバイスのレシーバーアプリにコンテンツをキャストするために使用されるローカルプレーヤーです。Receiver アプリにキャストしたら、Chromecast のリモコンと考えることができます。
送信者アプリは、Android 用 Brightcove ネイティブ SDK 用のキャストプラグインによって提供されます。このトピックでは、それについて学びます。
-
受信機アプリケーション -このアプリケーションは Chromecast デバイス上で動作します。これは、CSSとJavaScriptアセットを持つ単一ページの HTML アプリと考えることができます。
テストを行うには、次の手順を実行します。
本マニュアルでは、本稼働環境で使用するために、Brightcove Receiver v2.0.0 の使用方法を説明します。
サポートされている SDK バージョン
新しい Brightcove Receiver v2.0 でキャストプラグインを使用するには、バージョン 6.16.0 以降の Android 用 Brightcove ネイティブ SDK を使用する必要があります。
キャストプラグインの理解
キャストプラグインは、新しい ExoPlayer キャスト拡張機能と Google Play サービスキャストフレームワークの上に構築されています。キャストプラグインの依存関係を追加した後、gradleは他の必要な依存関係と一緒にPlay Servicesキャストフレームワークの依存関係、ExoPlayerキャスト拡張依存関係を引き出します。
キャストプラグインは再設計され、Video Cloud と統合する際の労力を最小限に抑えることができます。Video Cloud を使用する場合、BrightcoveCastMediaManager
クラスはビデオクラウドレスポンスから Brightcove Video
や Brightcove などの情報を収集します。Source
オブジェクト。EventType.SET_SOURCE
イベントが放出されるたびに。この情報はキャッシュされ、ユーザーが [再生] を選択してビデオをキューに入れるときに使用できます。
キャストプラグインの統合
Android キャストプラグイン用のネイティブ SDK とアプリを統合するには、2 つの方法があります。Brightcoveキャストレシーバー v2.0 または Google キャストデモレシーバーと統合できます。
どちらの統合でも、この依存関係をアプリプロジェクトに追加する必要があります。
implementation "com.brightcove.player:android-cast-plugin:6.16.0"
Brightcoveキャストレシーバー v2.0 を使用する
この統合は、Brightcove API を使用してコンテンツを配信しているBrightcoveのお客様を対象としています。
完全なコードサンプルについては、「 basicCastBrightCoveReceiverSampleApp 」を参照してください。
Google キャストデモ受信機を使用する
この統合は、キャスティングを初めて利用するBrightcoveのお客様を対象としています。
完全なコードサンプルについては、 BasicCastGoogleReceiverSampleApp を参照してください。
独自のキャストレシーバーアプリIDを指定する
BasicCastGoogleReceiverSampleApp は、Google デモレシーバーアプリ ID を設定します。これは、開始やテストには役立ちますが、実稼働には役立ちません。
Cast Receiver アプリケーションでこの値を上書きするには、サンプルアプリケーションの strings.xml ファイルに次の文字列値を定義します。
<string name="cast_receiver_app_id">4F8B3483</string>
Brightcove GoogleCastComponent
GoogleCastComponent
このクラスは、Brightcoveキャストプラグインのメインクラスです。これは、exoPlayer CastPlayer をインスタンス化し、そのリスナーを設定します。ビデオをロードしたり、キューに追加したりするために、いくつかの重要なメソッドを公開しています。また、GoogleCastComponent
このクラスでは、アクティビティおよびフラグメントのライフサイクルイベントを処理する複数の Brightcove イベントリスナー、および Media Info を放出して Chromecast デバイスに動画を読み込むために使用できるその他のイベントリスナーも追加します。
では、Builder GoogleCastComponent
パターンが使用されるようになりました。Android 版 v6.16.0 より前のネイティブ SDK では、コンポーネントをインスタンス化し、Context
EventEmitter
およびをGoogleCastComponent
コンストラクタ。次に、一連の個別のメソッド呼び出しでコンポーネントのオプションを設定します。
Android 用 Native SDK v6.16.0 以降では、Builder パターンを使用してのインスタンスを作成し、そのオプションを設定します。すべてを Builder メソッド呼び出しの 1 つのチェーン内で実行します。GoogleCastComponent
CustomData
と同様にGoogleCastComponent
、CustomData
クラスは Builder パターンを使用してオブジェクトをインスタンス化し、そのオブジェクトにプロパティを追加します。Brightcove Receiver CustomData
はを使用して Brightcove カタログから動画を取得できますが、リモートアセットをキャストする場合など、CustomData
完全なオブジェクトを送信する必要はありません。また、Google Demo Receiverを使用する場合、CustomData
の使用はサポートされていないことに注意してください。この説明では、CustomData
Brightcoveカタログから動画データを取得するために使用される受信機への送信に重点を置きます。
CustomDataって何ですか
CustomData
はオブジェクトに含まれる JSON MediaInfo
オブジェクトです。これは、Brightcoveキャストレシーバーアプリ v2.0 での使用を目的としています。
Brightcoveレシーバーおよびカタログデータによる CustomData
Brightcove Receiver と統合する場合、CustomData
JSON オブジェクトは次の形式になります。
"customData": {
"accountId": "1234567890",
"analyticsParams": {
"application": "com.brightcove.player.test",
"user": "abcde1c44b951234"
},
"catalogParams": {
"adConfigId": null,
"type": "video",
"bcovAuthToken": null,
"id": "2345678901",
"policyKey": "BCpkPolicyKeyObject"
}
}
CustomData
上記のオブジェクトの例には、Brightcove Receiver から動画をキャストするために必要なすべてのデータ要素が含まれています。このデータは暗号化に関係なく同じです。つまり、DRM動画の場合、ライセンスURLに追加の構造は必要ありません。
CustomData
オブジェクトの例は、 BrightCoveCastCoveReceiverSampleApp にもあります。
Googleデモ受信機とカスタムデータ
上記のように、CustomData
は Google デモレシーバーではサポートされていません。
BrightCoveCastMediaManager
上記のようにBrightcoveCastMediaManager
、を拡張して、そのメソッドをオーバーライドしたり、独自のメソッドを実装することができます。BrightCoveCastMediaManager クラスの拡張の例については、以下を参照してください。
- BrightCoveCastMediaManager セクションを拡張する
- basicCastCustomRemoteVideoSampleApp
OptionsProvider
次に、 GoogleキャストフレームワークのOptionsProvider実装を指定する必要があります。OptionsProvider
インターフェイスは、 CastContextクラスを初期化するために必要ないくつかのオプションを設定するのに役立ちます。ここでキャストレシーバーアプリ ID を設定します。の統合の詳細についてはOptionsProvider
、Google の「キャストコンテキストの初期化」ドキュメントを参照してください。
DefaultOptionsProvider
Brightcoveのキャストプラグインにはクラスが含まれています。このクラスでは、キャストレシーバーアプリケーション ID は、 strings.xml リソースファイルに設定された文字列キーを使用して設定されます。詳細およびアプリで無効にする方法については、上記の「独自のキャスト Receiver アプリ ID を使用する」セクションを参照してください。
DefaultOptionsProvider
OptionsProvider
クラスを使用するか独自の実装を使用するかにかかわらず、OptionsProvider
以下に示すように、アプリケーションの AndroidManifest.xmlファイルの実装クラス名をキーと値のペアのメタデータとして指定します。
<meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="com.brightcove.cast.DefaultOptionsProvider" />
DefaultOptionsProvider
クラスを使用する場合は、ExpandedControllerActivity
で同様のメタデータ情報を設定して、キャスト通知をオン/オフするようにを設定できます。androidManifest。
拡張されたコントローラアクティビティ
ExpandedControllerActivity には Google キャストライブラリが付属しており、Chromecast デバイスにキャストされている動画を制御できます。このクラスは、カスタマイズの柔軟性を提供します。たとえば、ボタンを表示できる 5 つのスロットがあり、3 番目のスロットは設定不可の [再生] ボタン用に予約されています。残りのボタンは、他の定義済みボタンとして設定することも、独自のカスタマイズボタンとして設定することもできます。
Brightcoveのキャストプラグインは、サブクラスを提供しますDefaultExpandedControllerActivity
。次のボタンは次の順序で有効になっています。
- クローズドキャプション
- 前をスキップ
- 遊ぶ
- 次をスキップ
- ミュート切り替え
さらに、Seek Bar は、標準で使用されているものと同じデフォルトの描画可能を設定しますBrightcoveMediaController
。
- 進行状況ドロワブル:
R.drawable.default_scrubber_progress_horizontal
- 親指ドロー可能:
R.drawable.default_scrubber_thumb
シークバーをカスタマイズする方法については、 SeekBarColorsSampleApp を参照してください。
DefaultExpandedControllerActivity
または独自のを設定するにはExpandedControllerActivity
、 AndroidManifest.xml ファイルに次のメタデータを設定します。
<meta-data android:name="com.brightcove.cast.DefaultOptionsProvider.EXPANDED_CONTROLLER_ACTIVITY_CLASS_NAME"
android:value="com.brightcove.cast.DefaultExpandedControllerActivity" />
キャスト通知
キャスト通知が有効な場合、ホームキーを押した後など、ビデオをキャストしてアプリをバックグラウンドに配置すると、通知が表示されます。
<PT キャスト通知を有効にするには、 AndroidManifest.xml ファイルに次のメタデータを設定し、通知がクリックされたときに起動するアクティビティの名前を指定します。
<meta-data android:name="com.brightcove.cast.DefaultOptionsProvider.NOTIFICATION_TARGET_ACTIVITY_CLASS_NAME"
android:value="com.brightcove.cast.BrightcoveControllerActivity" />
com.brightCove.cast.DefaultoptionsProvider.Notification_target_activity_Class_name を指定しない場合、または値に無効なアクティビティ名が含まれている場合、キャスト通知はオフになります。
キャストボタン
キャストボタンを使用すると、デバイスと同じネットワーク内の Chromecast デバイスを選択し、接続してセッションを作成できます。アプリケーションに [キャスト] ボタンを追加するには、Google の統合キャストに従ってください。キャストボタンドキュメントを追加します。
Brightcoveのキャストプラグインは、キャストボタンを簡単に設定するためのユーティリティメソッドを提供します。これは、[Activity/Fragment] メニューに [キャスト] ボタンを追加するだけの場合に便利です。詳細については、次のコードを参照してください。
//Activity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
GoogleCastComponent.setUpMediaRouteButton(MainActivity.this, menu);
return true;
}
ミニコントローラー
ミニコントローラは、アクティビティに添付されるフラグメントで、通常はレイアウトの下部にあります。ミニコントローラーを使用すると、ビデオを再生および一時停止でき、Chromecast デバイスでビデオが再生されるタイミングを示します。ミニコントローラをクリックすると、拡張コントローラが起動します。
ミニコントローラを有効にするには、アクティビティのレイアウトに次のコードを追加します。
<fragment
android:id="@+id/castMiniController"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:visibility="gone"
class="com.google.android.gms.cast.framework.media.widget.MiniControllerFragment" />
ミニコントローラのベストプラクティスを学ぶには、デザインチェックリストを参照してください。送信者ミニコントローラ文書。実装の詳細については、統合キャストを参照してください。ミニコントローラドキュメントを追加します。
高度なトピック
キャストセッションをリッスン中
Cast接続の開始時または終了時にアプリを反応させたい場合は、GoogleCastEventType.CAST_SESSION_STARTED
またはGoogleCastEventType.CAST_SESSION_ENDED
ここに示すイベントリスナー:
eventEmitter.on(GoogleCastEventType.CAST_SESSION_STARTED, new EventListener() {
@Override
public void processEvent(Event event) {
// Session Started
}
});
eventEmitter.on(GoogleCastEventType.CAST_SESSION_ENDED, new EventListener() {
@Override
public void processEvent(Event event) {
// Session Ended
}
});
または、GoogleCastComponent.isSessionAvailable()
を呼び出して、利用可能なセッションをチェックすることもできます。
ビデオのキャスティング
接続に成功した後、ビデオを Chromecast にキャストするには、EventeMitter を使用してメディア情報情報を放出するか、GoogleCastComponent
メソッドを直接使用することができます。
メディア情報を放出する場合は、次のイベントを使用できます。
GoogleCastEventType.LOAD_MEDIA_INFO
GoogleCastEventType.LOAD_MEDIA_QUEUE_ITEM
GoogleCastEventType.ADD_MEDIA_INFO
GoogleCastEventType.ADD_MEDIA_QUEUE_ITEM
次の表に、各イベントで期待されるプロパティを示します。
イベント名 | プロパティ | |
---|---|---|
キー | 値クラスタイプ | |
LOAD_MEDIA_INFO |
GoogleCastComponent.CAST_MEDIA_INFO GoogleCastComponent.CAST_MEDIA_PLAY_POSITION |
MediaInfo 整数 |
LOAD_MEDIA_QUEUE_ITEM |
GoogleCastComponent.CAST_MEDIA_QUEUE_ITEM |
MediaQueueItem |
ADD_MEDIA_INFO |
GoogleCastComponent.CAST_MEDIA_INFO GoogleCastComponent.CAST_MEDIA_PLAY_POSITION |
MediaInfo 整数 |
ADD_MEDIA_QUEUE_ITEM |
GoogleCastComponent.CAST_MEDIA_QUEUE_ITEM |
MediaQueueItem |
または、GoogleCastComponent
次の方法を使用できます。
-
public void loadMediaInfo(MediaInfo mediaInfo, long positionMs)
-
public void loadMediaInfo(MediaInfo mediaInfo)
-
public PendingResult<RemoteMediaClient.MediaChannelResult> loadItem(MediaQueueItem mediaQueue, int playheadPosition)
-
public PendingResult<RemoteMediaClient.MediaChannelResult> addItems(MediaQueueItem... mediaQueue )
デフォルトの MediaInfo データの変更
デフォルトでは、キャストプラグインは、によって放出される現在の Video オブジェクトと Source オブジェクトに関する情報を収集しますEventType.SET_SOURCE event
。App Receiver が認識するカスタム JSON オブジェクトをユーザーに追加するなど、追加情報を変更または追加する場合は、MediaInfo
loadMediaInfo()
addMediaInfo()
とからのメソッドBrightcoveCastMediaManager
。次に、あなたのBrightcoveCastMediaManager
サブクラスはコンストラクターパラメーターとしてに渡されますGoogleCastComponent
クラス。
これらのメソッドの内部では、MediaInfo
オブジェクトを作成し、前述のように、適切なイベントを放出することができます。必ず確認してくださいcom.brightcove.cast.util.CastMediaUtil
、を作成するためのいくつかのユーティリティメソッドを提供するためMediaInfo
VideoオブジェクトとSourceオブジェクトから。
キャストメディアControllerの設定
キャストセッションの開始時に Brightcove 動画ビューに表示されるコントローラーのレイアウトを変更するには、次の手順に従います。
BrightCoveCastMediaManager を拡張する
のデフォルト動作を変更するには、サブクラスを作成しBrightcoveCastMediaManager
、いくつかのキーメソッドを上書きします。
-
public void updateBrightcoveMediaController(boolean isRemote)
このメソッドは、
GoogleCastComponent
セッションが変更されたとき、つまりセッションが開始または終了したときに、によって呼び出されます。セッションが開始されると、isRemote
true
パラメータはになり、setupRemoteController
メソッドが呼び出されます。それ以外の場合、isRemote
false
はになり、resetToLocalController
が呼び出されます。 -
protected void setupRemoteController()
このメソッドはイベントを発行します
EventType.SET_MEDIA_CONTROLLER_CONFIG
とともにMediaControllerConfig
オブジェクト。MediaControllerConfig
このセクションの後半で詳しく説明します。このメソッドはまた、BrightcoveMediaController.CONTROL_BAR_CREATED
イベントをリッスンし、setupBrightcoveControlBar
メソッドを呼び出して反応します。 -
protected void resetToLocalController()
このメソッドは、を放出することにより、
BrightcoveMediaController
を元のコントローラレイアウトにリセットしますEventType.RESTORE_DEFAULT_MEDIA_CONTROLLER
。 -
protected void setupBrightcoveControlBar(BrightcoveControlBar controlBar)
BrightcoveMediaController
で提供されているレイアウトを使用してを再作成するとMediaControllerConfig
、BrightcoveControlBar
ビューにアクセスできます。ここから、ボタンなど UI ビューにアクセスして、OnClickListener
ボタンに追加することができます。
MediaControllerConfig を設定する
MediaControllerConfig
は、BrightcoveMediaController
クラスのデフォルトのコントロールレイアウトを変更するために使用できる設定クラスです。このクラスでは、レイアウトとを設定できますOnTouchListener
。以下に示すように、作成および設定したら、このオブジェクトを放出することができます。
Map<String, Object> properties = new HashMap<>();
properties.put(Event.MEDIA_CONTROLLER_CONFIG, myMediaControllerConfig);
eventEmitter.emit(EventType.SET_MEDIA_CONTROLLER_CONFIG,properties);
デフォルトMediaControllerConfig
オブジェクトはを設定しますR.layout.cast_media_controller
シングルのレイアウトとして演奏するボタン。クリックすると、2つのオプションを持つダイアログが開きます。
- 今すぐ再生 -選択すると、
loadMediaInfo()
メソッドが呼び出され、ビデオが読み込まれ、Chromecast で再生されます。 - キューに追加 -選択すると、
addMediaInfo()
メソッドが呼び出され、ビデオがキューの最後に追加されます。
コントロールバーの設定を上書きする
を放出してメディアコントローラのレイアウトを設定するとMediaControllerConfig
、BrightcoveControlBar
ビューが作成され、BrightcoveCastMediaManager.setupBrightcoveControlBar()
メソッドが呼び出されます。ここでは、IDでUIコンポーネントを取得し、適切なリスナーを追加することができます。
@Override
protected void setupBrightcoveControlBar(BrightcoveControlBar controlBar) {
Button playButton = controlBar.findViewById(R.id.cast_play);
if (playButton != null) {
playButton.setOnClickListener(new View.OnClickListener() {...});
}
}
既知の問題
Android9
Android 9 以降で Chromecast を使用する場合は、FOREGROUND_SERVICE
許可を含める必要があります。これにより、アプリがバックグラウンドでフォアグラウンドに戻されたときに、アプリは通知を使用してキャストセッションを制御できます。
次のように、uses-permission
タグをアプリの AndroidManifest.xml ファイルに追加する必要があります。
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
グーグルプレイサービス
送信者の Google Play サービスのバージョンが最新でない場合、キャスト接続が作成されないことがあります。送信者の Google Play サービス(特にキャストサービスフレームワークなど)が古くなると、キャスト接続の作成に失敗することがあります。これは、Google Playストアを通じて送信者のGoogle Playサービスを更新することで改善されます。