サポート問い合わせ先| システムステータス
ページコンテンツ

    Android用ネイティブSDKのキャストプラグイン

    このトピックでは、Brightcove Native SDK for AndroidのCastプラグインを使用して、Chromecastに接続されたテレビに動画をキャストする方法を学習します。

    概要

    Google キャストテクノロジを使用すると、モバイルデバイスからハイビジョンテレビや家庭用オーディオシステムへのストリーミング動画コンテンツを開始および制御できます。アプリから [キャスト] ボタンをタップして、大画面でコンテンツをストリーミングします。

    キャストアプリケーションを構築するには、次のコンポーネントが必要です。

    • 送信者アプリケーション -これはモバイルデバイス上に存在し、受信デバイスを検出し、安全な接続を確立し、コンテンツをミラーリングします。送信者アプリは、Chromecast デバイスのレシーバーアプリにコンテンツをキャストするために使用されるローカルプレーヤーです。Receiver アプリにキャストしたら、Chromecast のリモコンと考えることができます。

      送信者アプリは、Android 用 Brightcove ネイティブ SDK 用のキャストプラグインによって提供されます。このトピックでは、それについて学びます。

    • 受信機アプリケーション -このアプリケーションは Chromecast デバイス上で動作します。これは、CSSとJavaScriptアセットを持つ単一ページの HTML アプリと考えることができます。

      テストを行うには、次の手順を実行します。

      1. Googleのサンプルキャスト受信機から始める
      2. Google キャストアプリのドキュメントを確認する

      本マニュアルでは、本稼働環境で使用するために、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 では、コンポーネントをインスタンス化し、ContextEventEmitterおよびをGoogleCastComponentコンストラクタ。次に、一連の個別のメソッド呼び出しでコンポーネントのオプションを設定します。

    Android 用 Native SDK v6.16.0 以降では、Builder パターンを使用してのインスタンスを作成し、そのオプションを設定します。すべてを Builder メソッド呼び出しの 1 つのチェーン内で実行します。GoogleCastComponent

    CustomData

    と同様にGoogleCastComponentCustomDataクラスは Builder パターンを使用してオブジェクトをインスタンス化し、そのオブジェクトにプロパティを追加します。Brightcove Receiver CustomDataはを使用して Brightcove カタログから動画を取得できますが、リモートアセットをキャストする場合など、CustomData完全なオブジェクトを送信する必要はありません。また、Google Demo Receiverを使用する場合、CustomDataの使用はサポートされていないことに注意してください。この説明では、CustomDataBrightcoveカタログから動画データを取得するために使用される受信機への送信に重点を置きます。

    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 の「キャストコンテキストの初期化」ドキュメントを参照してください。

    DefaultOptionsProviderBrightcoveのキャストプラグインにはクラスが含まれています。このクラスでは、キャストレシーバーアプリケーション ID は、 strings.xml リソースファイルに設定された文字列キーを使用して設定されます。詳細およびアプリで無効にする方法については、上記の「独自のキャスト Receiver アプリ ID を使用する」セクションを参照してください。

    DefaultOptionsProviderOptionsProviderクラスを使用するか独自の実装を使用するかにかかわらず、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 オブジェクトをユーザーに追加するなど、追加情報を変更または追加する場合は、MediaInfoloadMediaInfo()addMediaInfo()とからのメソッドBrightcoveCastMediaManager。次に、あなたのBrightcoveCastMediaManagerサブクラスはコンストラクターパラメーターとしてに渡されますGoogleCastComponentクラス。

    これらのメソッドの内部では、MediaInfoオブジェクトを作成し、前述のように、適切なイベントを放出することができます。必ず確認してくださいcom.brightcove.cast.util.CastMediaUtil、を作成するためのいくつかのユーティリティメソッドを提供するためMediaInfo VideoオブジェクトとSourceオブジェクトから。

    キャストメディアControllerの設定

    キャストセッションの開始時に Brightcove 動画ビューに表示されるコントローラーのレイアウトを変更するには、次の手順に従います。

    1. BrightCoveCastMediaManager を拡張する
    2. MediaControllerConfig を設定する
    3. コントロールバーの設定を上書きする

    BrightCoveCastMediaManager を拡張する

    のデフォルト動作を変更するには、サブクラスを作成しBrightcoveCastMediaManager、いくつかのキーメソッドを上書きします。

    • public void updateBrightcoveMediaController(boolean isRemote)

      このメソッドは、GoogleCastComponentセッションが変更されたとき、つまりセッションが開始または終了したときに、によって呼び出されます。セッションが開始されると、isRemotetrueパラメータはになり、setupRemoteControllerメソッドが呼び出されます。それ以外の場合、isRemotefalseはになり、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で提供されているレイアウトを使用してを再作成するとMediaControllerConfigBrightcoveControlBarビューにアクセスできます。ここから、ボタンなど 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()メソッドが呼び出され、ビデオがキューの最後に追加されます。

    コントロールバーの設定を上書きする

    を放出してメディアコントローラのレイアウトを設定するとMediaControllerConfigBrightcoveControlBarビューが作成され、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サービスを更新することで改善されます。


    ページの最終更新日04 Oct 2021