Android用Native SDKを使用したコードスニペット

製品(複数可)
Brightcove Player
ビデオクラウド
役割
デバイスSDK開発者
タスク
ネイティブSDKを使用して開発する
トピック)
コードサンプル
API
再生API
SDK
アンドロイド

このトピックでは、SDKを使用して開発する際に参考になるコードスニペットのコレクションを紹介します。 詳細なソリューションについては、 Androidプレーヤーのサンプル.

目次

広告
アナリティクス
キャプション
コンセプト
コンテンツセキュリティ(DRM)
ライブストリーム
再生
プレーヤーコントロール
プレイリスト
映像コンテンツ

Android TVのコントロールのカスタマイズ

デバイスまたはAndroid TVのコントロールバーにボタンを追加できます。 次の手順では、Android TVのコントロールバーにフルスクリーンボタンを追加する手順を説明します。

  1. 開く カスタマイズされたコントロール サンプルアプリ。 これを出発点として使用します。 サンプルアプリケーションを確認する README ファイルを参照してください。
  2. 開く res / layout / land / my_media_controller.xml Android Studioのファイル
  3. コピー ボタン 要素 全画面表示 ボタン。 コードは次のようになります。
    <アンドロイド:padding = "4dp" android:layout_gravity = "center_vertical" android:layout_height = "wrap_content" android:layout_width = "wrap_content" android: visibility = "visible" android:text = "@ string / brightcove_controls_enter_full_screen" />
  4. 開く res / layout / my_tv_media_controller.xml Android Studioのファイル
  5. コピーしたものを貼り付け ボタン 要素をこのレイアウトファイルに追加します。 要素の位置は、コントロールバーの位置を決定します。
  6. 上部にスクロールする res / layout / my_tv_media_controller.xml ファイル。 styleプロパティがtrueに設定されていることを確認する @スタイル/ BrightcoveControlBar.TV.Custom。 コードは次のようになります。
    <?xml version = "1.0" encoding = "utf-8"?> <com.brightcove.player.mediacontroller.BrightcoveControlBar xmlns:android = "http://schemas.android.com/apk/res/android" xmlns: bmc = "http://schemas.android.com/apk/res-auto" xmlns:tools = "http://schemas.android.com/tools" tools:ignore = "Overdraw、InconsistentLayout"アンドロイド:id = "アンドロイド:layout = "match_parent" android:layout_height = "wrap_content"アンドロイド:padding = "8dp" android:orientation = "horizo​​ntal" android:layout_gravity = "bottomアンドロイド:background =" @ color / bmc_background " " style =" @ style / BrightcoveControlBar.TV.Custom ">
  7. 開く res / values / styles.xml Android Studioのファイル
  8. 〜に スタイル 要素と の値 BrightcoveControlBar.TV.Custom項目 フルスクリーンボタンの要素を それを表示する。
    < item name = "brightcove_full_screen"> true </ item> </ style> <style name = "BrightcoveControlBar.TV.Custom"> <item name = "brightcove_vr_mode"> false </ item>
  9. それでおしまい。 Android TVの物理デバイスまたは仮想デバイスでサンプルアプリケーションを実行します。 コントロールバーには全画面ボタンが表示されます。
    全画面ボタン
    全画面ボタン

ライブストリームの再生時間の取得

ライブストリームの再生時間を取得するには、 MAX_POSITION。 これにより、ライブストリームの最大のシーク可能位置が得られます(つまり、スクロールバーをドラッグできる範囲が最も広い)。 コードは次のようになります。

イベントが発生したときにイベントが発生したときにイベントを発生させるイベントを発生させます。

サムネイル画像のURLを取得する

Brightcoveライブラリのサムネイルまたはビデオ静止画を使用することができます。 画像のURLを取得するには、次のコードを使用します。

エッジカタログ(com.brightcove.player.edge.Catalog)を使用しているビデオクラウドのお客様は、サムネイルURLを次のように取得できます。

ストリングthumbnailUrl = video.getProperties()。get( "thumbnail")。toString();

サムネイル画像が小さすぎる場合は、代わりにビデオ静止画像を取得できます。

ストリングvideoStillUrl = video.getProperties()。get( "stillImageUri")。toString();

グーグルアナリティクス

Brightcoveプレーヤーとカタログクラスを使用すると、ビデオ分析が自動的に収集され、Video Cloud Analyticsモジュールに表示されます。 追加の指標については、Googleアナリティクスをアプリに追加することができます。

Googleアナリティクスとアプリを統合するには、次の手順を実行します。

  1. Googleサービスプラグインをプロジェクトに追加します。
  2. Googleの設定ファイルを取得してプロジェクトに追加します。
  3. アプリケーションを拡張し、アプリケーショントラッカーを返すヘルパーメソッドを提供します。 それは、 google-services AnalyticsApplication.
  4. BrightcovePlayerを拡張する別のクラスでは、共有トラッカーインスタンスを取得します。
    //共有トラッカーインスタンスを取得します。AnalyticsApplication application =(AnalyticsApplication)getApplication(); トラッカー= application.getDefaultTracker();
  5. 適切なメソッドをオーバーライドして画面の変更をログに記録したり、トラッキングのためのカスタムイベントを送信したりします。

詳細な手順については、Googleの Android Appにアナリティクスを追加する.

全画面モード

コードを使用してフルスクリーンモードを管理できます。

  • フルスクリーンモードを設定するコードは次のとおりです。

    brightcoveVideoView.getEventEmitter()。emit(EventType.ENTER_FULL_SCREEN);
  • フルスクリーンモードを終了するコードは次のとおりです。

    brightcoveVideoView.getEventEmitter()。emit(イベントタイプ.EXIT_FULL_SCREEN);

手動によるDRMコンテンツの追加

Brightcove Playerのお客様は、自分のサーバーからDRM保護されたコンテンツを使用することができます。 次のようにDRMコンテンツを手動で読み込むことができます。

import com.brightcove.player.display.WidevineMediaDrmCallback; ビデオビデオ= Video.createVideo( "https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears.mpd"); video.getProperties()。put(WidevineMediaDrmCallback.DEFAULT_URL、 "https://proxy.uat.widevine.com/proxy?video_id=&provider=widevine_test"); brightcoveVideoView.add(video); brightcoveVideoView.start();

メソッド:同期または非同期?

Android用Native Player SDKに含まれる非同期メソッドの一部を次に示します。

  • 開始(), 探す() そして stopPlayback() メソッドは、システム内の他のコンポーネントが処理するイベントを発生させるため、非同期です。
  • clear() メソッドはリストの更新に関して同期しますが、現在のビデオのアンロードに関しては非同期です。

DRMによるオフライン再生

オフライン再生のためにダウンロードされたビデオの場合は、ダウンロード状況を通知領域に表示することもできます。 通知のタイトルはビデオタイトルに設定されます。 ダウンロードが一時停止またはキャンセルされた場合、通知は削除されます。

通知ステータスをダウンロードする
ステータスをダウンロード 通知内容テキスト 通知アイコン
ダウンロード R.string.odrm_download_running - これはデフォルトで「ダウンロード中...」です

完了率を示す進捗バーが表示されます。
プラットフォームにデフォルトでアニメーション化された「ダウンロード」アイコン - android.R.drawable.stat_sys_download
リトライ R.string.odrm_download_waiting_retry - これはデフォルトで「Waiting retry ...」です  
失敗しました R.string.odrm_download_failed - これはデフォルトでは「失敗!」です  
完成しました R.string.odrm_download_complete - これはデフォルトで「保存済み」です プラットフォームのデフォルトの静的な「ダウンロード済み」アイコン - android.R.drawable.stat_sys_download_done

「再試行」または「失敗」のステータスの場合、通知サブテキストはエラー・タイプに基づいて適切なリソースに設定されます。 完全なリストはここにあります:

  • R.string.odrm_error_none
  • R.string.odrm_error_cannot_resume
  • R.string.odrm_error_device_not_found
  • R.string.odrm_error_file_already_exists
  • R.string.odrm_error_file_error
  • R.string.odrm_error_http_data_error
  • R.string.odrm_error_insufficient_space
  • R.string.odrm_error_too_many_redirects
  • R.string.odrm_error_unhandled_http_code
  • R.string.odrm_error_unknown

Playback APIによるページング

Playback APIからVideo Cloudコンテンツを取得するときに、プレイリストのページングを実装できます。

再生リスト内の一連の動画を参照するには、次のリクエストURLパラメータを使用します。

  • 限界 - 再生APIから返される動画の数を定義する
  • オフセット - 再生APIから再生リスト内をスキップする動画の数を設定します

クエリパラメータは、MapメソッドとしてCatalogメソッドに渡されます。 オブジェクトをキーと値のペアとして使用します。 この例では、プレイリスト内の6番目のビデオから始まる10ビデオを返します。、>

Map <String、String> queryParameters =新しいHashMap <>(); queryParameters.put( "limit"、 "6"); queryParameters.put( "offset"、 "9"); カタログカタログ=新しいカタログ(eventEmitter、 "myAccount"、 "myPolicy"); catalog.findPlaylistByID( "myPlaylistId"、null、queryParameters、myListener);

ローカルビデオを再生する

ローカルに保存されているMP4ビデオを再生する場合は、それらをアプリケーションアセットフォルダに保存する必要があります。

Uri video = Uri.parse( "file:///android_asset/path/to/video.mp4"); brightcoveVideoView.add(Video.createVideo(video.toString())); brightcoveVideoView.start();

広告なしでシーク

あなたが使用することができます adsDisabled のプロパティ VideoPlaybackController 動画の再生中に広告の再生を無効にします。

この機能を使用するには、次の手順を実行します。

  1. ゲット VideoPlaybackController インスタンスを BrightcoveVideoView.

    VideoPlaybackController playbackController = brightcoveVideoView.getPlaybackController();
  2. 広告の再生を無効にする。

    playbackController.setAdsDisabled(true);
  3. 現在のビデオの希望の時間位置に移動します。
  4. 通常の広告動作を再開します。

    playbackController.setAdsDisabled(false);

あなたのコードは次のようになります:

最終的なVideoPlaybackControllerのplaybackController = brightcoveVideoView.getPlaybackController(); イベントが発生したときにイベントを発生させます。eventEvent.on(EventType.VIDEO_DURATION_CHANGED、new EventListener(){@Override public void processEvent(finalイベントイベント){playbackController.setAdsDisabled(true); brightcoveVideoView.seekTo(10000);}}); eventEvent.id(EventType.DID_SEEK_TO、新しいEventListener(){@Override public void processEvent(finalイベントイベント){playbackController.setAdsDisabled(false);}}));

バッファサイズの設定

次のセグメントの配信がCDNから遅れている場合は、バッファ長を長くしてプレーヤのバッファリングをなくすことを検討することができます。 しかし、HLSがすでに行っているように、手動で何もできない場合もあります。

HLSはすぐに再生し、追いつけない場合は品質を落とすように設計されています。 この方法では、バッファをプリロードする必要はありません。 それが維持できない場合は、中断を防ぐためにできるだけ多くのビデオをできるだけ読み込みます。

つまり、ExoPlayer 1実装を使用している場合は、次のように制御できます。

たとえば、バッファの長さを120秒に設定する場合は、 minBufferMs to 120 * 1000.

キャプションとテーマの設定

現在、 BrightcoveCaptionPropertiesActivity Brightcove Player SDKのマニフェストファイルに設定されているため、開発者はアプリケーションで指定する必要はありません。

<?xml version = "1.0" encoding = "utf-8"?> <マニフェストxmlns:android = "http://schemas.android.com/apk/res/android" package = "com.brightcove.player" android :versionCode = "1" android:versionName = "1.0"> <application> <! - このアクティビティをマニフェストに登録しないと、SDKを使用しているアプリケーションがアクセスしようとするとクラッシュします。  - > <! - アプリケーションのビルドプロセス中、このマニフェストはアプリレベルのものとマージされます。 - > <activity android:name = "com.brightcove.player.captioning.BrightcoveCaptionPropertiesActivity" /> </ application> </ manifest>

BrightcoveCaptionPropertiesActivity プラットフォームのデフォルトテーマを継承します。 <アクティビティ> あなたのアプリのマニフェストのレベル。

1つのアプリテーマを <アプリケーション> レベル、次に BrightcoveCaptionPropertiesActivity このアプリケーションレベルのテーマのプロパティを継承します。 いくつかのテーマでは、これにより、アクティビティが奇妙な様相を呈したり、判読不能になったりすることがあります。

そのような場合は、 BrightcoveCaptionPropertiesActivity あなた自身のマニフェストで、そのようなテーマをそこに適用する:

<activity android:name = "com.brightcove.player.captioning.BrightcoveCaptionPropertiesActivity" android:theme = "@ style / MyCustomCaptionSettingsTheme" />

デフォルトのキャプションの設定

ビデオで複数の言語キャプションが使用されている場合は、再生が開始されるときにプログラムによって言語を設定できます。 コードは次のようになります。

イベントが発生したときにイベントが発生したときにイベントが発生したときにイベントが発生したときにイベントが発生したときにイベントが発生したときに発生します。

ピークビットレートの設定

プレーヤーにビットレートセレクターを実装するために、次のコードを使用してピークビットレートを設定することができます。

((ExoPlayerVideoDisplayComponent)videoView.getVideoDisplay())。setPeakBitrate(bitRate);

360°動画のVRゴーグルモードを設定する

360°ビデオを再生するとき、ユーザーはコントロールバーのVideo 360ボタンを選択してVRゴーグルモードに切り替えることができます。 どちらかを使用している場合 BrightcovePlayer or BrightcovePlayerFragment VRゴーグルモードが有効になっていると、画面の向きが横に変わります。

カスタムアクティビティを使用している場合は、次のものを追加する必要があります。

イベントが発生したときにイベントが発生したときにイベントが発生したときにイベントを発生させるイベントを発生させるイベントハンドラです。

静止画の表示/非表示

Video Cloudライブラリからビデオを取得するときのデフォルトの動作は、再生が開始されるまでビデオ静止画を表示することです。

ビデオ静止画を非表示にする

ビデオを自動再生している場合は、ビデオ静止画を非表示にすることができます。 これを行うには、あなたは SET_VIDEO_STILL 次のようにデフォルト動作を防止します。

イベントが発生したときにイベントが発生したときにイベントが発生したときにイベントが発生したときにイベントが発生したときに発生します。

ビデオ静止画を表示する

いつでもビデオを表示することができます。 SET_VIDEO_STILL イベント VIDEO_STILL プロパティは、ビデオ静止画のURIに設定されます。

動画の途中で再生を開始する

場合によっては、ビデオの途中から再生を開始する必要がある場合があります。 これを行うには、 BrightCoveVideoView.seekTo() 再生を開始する前に

VideoVideoView.getEventEmitter()は、VideoVideoView.getEventEmitter()を使用して、ビデオクリップを作成します。 BrightcoveVideoView.add(ビデオ); brightcoveVideoView.pause();()イベントの発生時に、 ;}});

動画を交換する

この例では、プレーヤーで動画を交換する方法を示しています。

単一のビデオの使用

から clear() メソッドが非同期である場合、新しいビデオをプレーヤーに追加する前に待機する必要があります。 ここには2つのオプションがあります。

  • Video Cloudからビデオをフェッチする時間がプレイリストを更新する時間を短くする必要があるので、次のようなことを試すことができます:

    brightcoveVideoView.clear(); (ビデオビデオ); brightcoveVideoView.start();}}); catalog.findVideoByID( "123456789"、新しいVideoListener(){@オーバーライドpublic void onVideo(最終ビデオビデオ){brightcoveVideoView.add(video);
  • もう1つの方法は、イベントを待つことです。

    このイベントは、イベントが発生したときに発生します。イベントが発生したときにイベントが発生した場合は、イベントが発生します。ビデオ); brightcoveVideoView.start();}}); brightcoveVideoView.clear();}}));

プレイリストの使用

プレイリストを使用している場合は、 clear() メソッドは、プレイリストのすべての要素を削除します。 だから、あなたは IndexOutOfBounds プレイリストの最初の動画にジャンプしようとすると例外です

代わりに、次のようなものを試すことができます:

brightcoveVideoView.pause(); brightcoveVideoView.stopPlayback(); brightcoveVideoView.setCurrentIndex(0);

プレイリスト内のビデオを切り替える

プレイリストを使用している場合は、次のコードを使用してプレイリスト内のビデオを切り替えることができます。

プライベートvoid setupControls(List <Video> videos){previousVideoButton =(Button)findViewById(R.id.previous_video_button); nextVideoButton =(ボタン)findViewById(R.id.next_video_button); if(videos!= null){previousVideoButton.setEnabled(false); 前のバージョンのVideoButton.setOnClickListener(新しいView.OnClickListener(){public void onClick(View view){int index = brightcoveVideoView.getCurrentIndex(); int size = brightcoveVideoView.getList()。size(); previousVideoButton.setEnabled(index> 1); nextVideoButton.setEnabled((index + 1)<size); if(index> 0){brightcoveVideoView.setCurrentIndex(index-1);}}}); nextVideoButton.setEnabled(videos.size()> 1); オーバーライドされます。オーバーライドされます。オーバーライドされます。オーバーライドされます。オーバーライドされます。オーバーライドされます。オーバーライドされます。オーバーライドされます。オーバーライドされます。オーバーライドされます。オーバーライドされます。オーバーライドされます。 ; nextVideoButton.setEnabled((index + 0)<size); if((index + 2)<size){brightcoveVideoView.setCurrentIndex(index + 1);}}}); }}

ボリュームコントロールの操作

プレイヤーをプログラムでミュートまたはミュート解除することができます。 Brightcoveでは、可能な限りBrightcoveExoPlayerVideoViewを使用することをお勧めします。

BrightcoveExoPlayerVideoView

使用している場合 BrightcoveExoPlayerVideoView次の操作を行うことで、プレイヤーをプログラムでミュートまたはミュート解除することができます。

フロートボリューム= 100; ();}}});();}};}}};}}};}}};}}};}}}; ... private void setMute(boolean mute){volume =ミュート? 0:100; 地図  プロパティ=新しいHashMap <>(); プロパティ(event.VOLUME、volume); brightcoveVideoView.getEventEmitter()。emit(EventType.SET_VOLUME、プロパティ); }  、>

BrightcoveVideoView

あなたが BrightcoveVideoViewこれはAndroidの MediaPlayerの次のコードを使用して、プレイヤーをプログラムでミュートまたはミュート解除することができます。

フロートボリューム= 100; ();}}});();}};}}};}}};}}};}}};}}}; ... private void setMute(boolean mute){volume =ミュート? 0:1; Map <String、Object>プロパティ=新しいHashMap <>(); プロパティ(event.LEFT_VOLUME、volume); プロパティ(event.RIGHT_VOLUME、volume); brightcoveVideoView.getEventEmitter()。emit(EventType.SET_VOLUME、プロパティ); }