目次
アナリティクス
キャプション
コンテンツセキュリティ (DRM)
ライブストリーム
再生
プレーヤコントロール
プレイリスト
Android TV のコントロールをカスタマイズする
デバイスまたは Android TV のコントロールバーにボタンを追加できます。以下の手順では、Android TVのコントロールバーにフルスクリーンボタンを追加する手順を説明します。
- カスタマイズコントロールサンプルアプリを開きます。これを出発点として使用します。プレーヤーコントロールのカスタマイズの詳細については、サンプルアプリの README ファイルを参照してください。
- Androidスタジオで res/layout/land/my_media_controller.xml ファイルを開きます。
- をコピーします
Button
の要素full_screen
ボタン。コードは次のようになります。<Button style="@style/BorderlessButton" android:id="@id/full_screen" android: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"/>
- Androidスタジオで res/layout/my_tv_media_controller.xml ファイルを開きます。
Button
コピーした要素をこのレイアウトファイルに貼り付けます。要素の位置によって、コントロールバー内での位置が決定されます。- res/layout/my_tv_media_controller.xml ファイルの先頭までスクロールします。style プロパティがに設定されていることを確認します
@style/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" android:id="@+id/brightcove_control_bar" android:background="@color/bmc_background" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="8dp" android:orientation="horizontal" android:layout_gravity="bottom" style="@style/BrightcoveControlBar.TV.Custom">
- Androidスタジオで res/values/styles.xml ファイルを開きます。
style
name
BrightcoveControlBar.TV.Custom
値がの要素に、item
フルスクリーンボタンの要素を選択し、true
それをに設定して表示します。<style name="BrightcoveControlBar.TV.Custom"> <item name="brightcove_vr_mode">false</item> <item name="brightcove_full_screen">true</item> </style>
- それだAndroid TV の物理デバイスまたは仮想デバイスでサンプルアプリを実行します。コントロールバーにフルスクリーンボタンが表示されるはずです。
フルスクリーンモード
コードを使用してフルスクリーンモードを管理できます。
-
フルスクリーンモードを設定するコードは次のとおりです。
brightcoveVideoView.getEventEmitter().emit(EventType.ENTER_FULL_SCREEN);
-
フルスクリーンモードを終了するコードは次のとおりです。
brightcoveVideoView.getEventEmitter().emit(EventType.EXIT_FULL_SCREEN);
ライブストリームの期間を取得する
ライブストリームの期間を取得するには、を使用しますMAX_POSITION
。これにより、ライブストリームのシーク可能な最大位置が得られます(つまり、スクロールバーをドラッグできる最も遠い位置)。コードは次のようになります。
brightcoveVideoView.getEventEmitter().on(EventType.PROGRESS, new EventListener() {
@Override
public void processEvent(Event event) {
int duration = (int) event.properties.get(Event.MAX_POSITION);
}
});
ネットワーク帯域幅の検出
ダウンロードを操作する場合など、アプリ内のネットワーク帯域幅を検出する必要があるユースケースがあります。
帯域幅を検出するために、Android用ネイティブSDKはBandwidthMeter
ExoPlayerによって提供されるクラス。私たちのPlayerBandwidthMeter
クラスはBandwidthMeter
クラスを提供し、getBitrateEstimate
推定ビットレートを返すメソッド。
詳細については、以下を参照してください。
- BrightcovePlayerBandwidthMeterクラス
- 役職:簡略化された帯域幅メーターの使用
- ExoPlayerBandwidthMeterインターフェース
- ExoPlayerBandwidthMeter.EventListenerインターフェース
下記がその例です。
ExoPlayerVideoDisplayComponent exoPlayer = (ExoPlayerVideoDisplayComponent) brightcoveVideoView.getVideoDisplay();
exoPlayer.getBandwidthMeter().addEventListener(myHandler, new BandwidthMeter.EventListener() {@
Override public void onBandwidthSample(int elapsedMs, long bytesTransferred, long bitrateEstimate) {}
});
ExoPlayer インスタンスの取得
Brightcove ネイティブ SDK では公開されていないプロパティを変更するために ExoPlayer オブジェクトを取得する必要がある場合があります。このオブジェクトのインスタンスは、ビデオの設定後に作成されます。だから、DID_SET_VIDEO
あなたはイベントを待つ必要があります。
ExoPlayer インスタンスを取得するには、次の操作を行います。
// Get the ExoPlayer instance
eventEmitter.on(EventType.DID_SET_VIDEO, new EventListener() {
@Override
public void processEvent(Event event) {
VideoDisplayComponent videoDisplayComponent = brightcoveVideoView.getVideoDisplay();
if (videoDisplayComponent instanceof ExoPlayerVideoDisplayComponent) {
// Get ExoPlayer
ExoPlayer exoPlayer = ((ExoPlayerVideoDisplayComponent) videoDisplayComponent).getExoPlayer();
if (exoPlayer instanceof SimpleExoPlayer) {
// Get SimpleExoPlayer
SimpleExoPlayer simpleExoPlayer = (SimpleExoPlayer) exoPlayer;
Log.v(TAG, "onDID_SET_VIDEO: ExoPlayer = " + simpleExoPlayer);
}
}
}
});
ExoPlayer AudioAttribute
のプロパティの変更例については、「ExoPlayer インスタンスで AudioAttributes を設定する」フォーラム投稿を参照してください。
サムネイル画像の URL を取得する
Brightcove ライブラリのサムネイルまたは動画の静止画像を使用することもできます。画像の URL を取得するには、次のコードを使用します。
エッジカタログ(com.brightcove.Player.edge.calog)をご利用の Video Cloud のお客様は、次のようなサムネイル URL を取得できます。
String thumbnailUrl = video.getProperties().get("thumbnail").toString();
サムネイル画像が小さすぎる場合は、代わりにビデオの静止画像を取得できます。
String videoStillUrl = video.getProperties().get("stillImageUri").toString();
グーグルアナリティクス
Brightcoveプレーヤーとカタログクラスを使用している場合、動画分析は自動的に収集され、Video Cloud Analytics モジュールに表示されます。その他の指標については、Google アナリティクスをアプリに追加できます。
Google アナリティクスをアプリと統合するには、次の手順に従います。
- Google サービスプラグインをプロジェクトに追加します。
- Google 設定ファイルを取得し、プロジェクトに追加します。
- アプリケーションを拡張し、アプリケーションのトラッカーを返すヘルパーメソッドを提供します。これは、 GoogleサービスのAnalyticsApplicsに似ているはずです。
- BrightCovePlayer を拡張する別のクラスで、共有トラッカーインスタンスを取得します。
// Obtain the shared Tracker instance AnalyticsApplication application = (AnalyticsApplication) getApplication(); tracker = application.getDefaultTracker();
- 適切なメソッドをオーバーライドして、画面の変更を記録したり、カスタムイベントを送信して追跡したりできます。
詳細な手順については、Google のドキュメントで Android アプリにアナリティクスを追加してください。
リモートビデオとポスター画像の読み込み
Brightcove Player は、リモートサーバーの動画アセットを使用するカスタマーだけです。リモートサーバー上に存在するビデオとポスター画像をロードするには、次の手順に従います。
-
onCreate()
メソッドでは、ビデオビューを定義した後、リモートサーバーでホストされているビデオからビデオオブジェクトを作成します。使用するビデオの種類に合わせて、を設定します。DeliveryType
Video video = Video.createVideo("https://learning-services-media.brightcove.com/videos/hls/greatblueheron/greatblueheron.m3u8", DeliveryType.HLS);
-
ビデオの再生を開始する前に、ポスター画像として使用するリモート画像をロードします。
try { java.net.URI myposterImage = new java.net.URI("https://solutions.brightcove.com/bcls/assets/images/Great-Blue-Heron.png"); video.getProperties().put(Video.Fields.STILL_IMAGE_URI, myposterImage); } catch (URISyntaxException e) { e.printStackTrace(); }
-
ビデオをビューに追加し、ビデオの再生を開始します。
brightcoveVideoView.add(video); brightcoveVideoView.start();
-
onCreate()
メソッドが次のように表示されることを確認します。@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view); // Optional: For Brightcove Player customers to register their apps Analytics analytics = brightcoveVideoView.getAnalytics(); analytics.setAccount("your account Id"); // Define a video from a remote server Video video = Video.createVideo("https://learning-services-media.brightcove.com/videos/hls/greatblueheron/greatblueheron.m3u8", DeliveryType.HLS); // Load a remote poster image try { java.net.URI myposterImage = new java.net.URI("https://solutions.brightcove.com/bcls/assets/images/Great-Blue-Heron.png"); video.getProperties().put(Video.Fields.STILL_IMAGE_URI, myposterImage); } catch (URISyntaxException e) { e.printStackTrace(); } // Add video to the view brightcoveVideoView.add(video); // Start video playback brightcoveVideoView.start(); }
DRM コンテンツを手動で追加する
Brightcove Player のお客様は、DRM で保護されたコンテンツを自分のサーバーで使用することができます。DRM コンテンツは、次のように手動でロードできます。
import com.brightcove.player.display.WidevineMediaDrmCallback;
Video video = 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用のネイティブプレーヤーSDKにある非同期メソッドの一部を次に示します。
- ザ・
start()
、seekTo()
そしてstopPlayback()
メソッドは、システム内の他のコンポーネントが処理するイベントを発行するため、非同期です。 clear()
このメソッドは、リストの更新に関して同期的ですが、現在のビデオのアンロードに関して非同期です。
プレイヤーをミュート/ミュート解除する
プログラムでプレーヤーをミュートまたはミュート解除できます。Brightcoveでは、可能な限り BrightCoveExoPlayerVideoView を使用することをお勧めします。
BrightCoveExoPlayerVideoView
BrightCoveExoPlayerVideoView を使用する場合、次の操作を実行して、プログラムでプレーヤーをミュートまたはミュート解除できます。
float volume = 100F;
...
brightcoveVideoView.getEventEmitter().on(EventType.DID_SET_VIDEO, new EventListener() {
@Override
public void processEvent(Event event) {
setMute(true);
brightcoveVideoView.start();
}
});
...
private void setMute(boolean mute) {
volume = mute ? 0F : 100F;
Map<string, Object> properties = new HashMap<>();
properties.put(Event.VOLUME, volume);
brightcoveVideoView.getEventEmitter().emit(EventType.SET_VOLUME, properties);
}
ブライトCoveVideoView
を使用する必要がある場合BrightcoveVideoView、Androidを使用しますMediaPlayer、次のコードを使用して、プログラムでプレーヤーをミュートまたはミュート解除できます。
float volume = 1F;
...
brightcoveVideoView.getEventEmitter().on(EventType.DID_SET_VIDEO, new EventListener() {
@Override
public void processEvent(Event event) {
setMute(true);
brightcoveVideoView.start();
}
});
...
private void setMute(boolean mute) {
volume = mute ? 0F : 1F;
Map<String, Object> properties = new HashMap<>();
properties.put(Event.LEFT_VOLUME, volume);
properties.put(Event.RIGHT_VOLUME, volume);
brightcoveVideoView.getEventEmitter().emit(EventType.SET_VOLUME, properties);
}
DRMでオフライン再生
オフライン再生用にダウンロードされた動画の場合は、通知領域にもダウンロード状態が表示されます。通知のタイトルは、ビデオタイトルに設定されます。ダウンロードが一時停止またはキャンセルされた場合、通知は削除されます。
ダウンロードステータス | 通知内容テキスト | 通知アイコン |
---|---|---|
ダウンロード中 | R.string.odrm_download_running -これはデフォルトで「ダウンロード中…」です完了率を示す進行状況バーが表示されます。 |
プラットフォームのデフォルトのアニメーション「ダウンロード」アイコン- android.R.drawable.stat_sys_download |
再試行 | R.string.odrm_download_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
再生 API を使用したページング
再生 API から Video Cloud コンテンツを取得するときに、プレイリストのページングを実装できます。
プレイリストの一連の動画をページに移動するには、次のリクエスト URL パラメータを使用します。
クエリパラメータは、キーと値のペアとして、Map
オブジェクトとして Catalog メソッドに渡されます。この例では、再生リスト内の 10 番目の動画から 6 つの動画を返します。
Map<String, String> queryParameters = new HashMap<>();
queryParameters.put("limit", "6");
queryParameters.put("offset", "9");
Catalog catalog = new Catalog(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();
プレーヤーコントロールを底に配置する
デフォルトでは、プレーヤーコントロールバーは次に示すように、ビデオの真下に配置されます。
また、プレーヤーコントロールバーをビデオビューの下部に配置することもできます。コントロールはの一部であるためBrightcoveVideoView
、高さをに設定するとmatch_parent
、ビューは画面全体を覆います。コントロールがビューの下部に表示される場合、ビデオはビューの中央に残ります。
これを行うには2つの方法があります。最初のアプローチは次のとおりです。
- プロジェクトの main/res/values/style.xml ファイルを開きます。
-
次の XML コードを追加します。
<style name="BrightcoveControlBar" parent="BrightcoveControlBarDefault"> <item name="brightcove_align">false</item> </style>
または、 MainActivity.java ファイル内のコードを次のように使用できます。
- プロジェクトの MainActivity.java ファイルを開きます。
-
次に示すように、イベントエミッタを取得した後:
EventEmitter eventEmitter = brightcoveVideoView.getEventEmitter();
次のイベントリスナーとコードを追加します。コントロールバーが作成されたことを確認するために、
DID_SET_VIDEO
イベントの後まで待っています。eventEmitter.on(EventType.DID_SET_VIDEO, new EventListener() { @Override public void processEvent(Event event) { BrightcoveControlBar brightcoveControlBar = brightcoveVideoView.getBrightcoveMediaController().getBrightcoveControlBar(); brightcoveControlBar.setAlign(false); } });
IMA広告をプリロードする
Android 用ネイティブ SDK および IMA プラグインを使用して広告をプリロードするには、setEnablePreloading(true)
プロパティを使用します。
このプロパティを使用するには、次の手順を実行します。
-
出発点は、 IMAサンプルアプリです。
-
private void setupGoogleIMA()
関数を見つけます。 -
関数の最後のコード行の前にスニペットコードブロックを追加します。
ImaSdkSettings imaSdkSettings = sdkFactory.createImaSdkSettings(); AdsRenderingSettings adsRenderingSettings = ImaSdkFactory.getInstance().createAdsRenderingSettings(); adsRenderingSettings.setEnablePreloading(true);
-
adsRenderingSettings
最後のコード行にパラメータを追加します。googleIMAComponent = new GoogleIMAComponent(brightcoveVideoView, eventEmitter, true, adsRenderingSettings);
広告なしでシークする
adsDisabled
プロパティを使用すると、動画を通じて検索している間、広告の再生を無効にすることができます。VideoPlaybackController
この機能を使用するには、次の手順を実行します。
-
VideoPlaybackController
からインスタンスを取得しますBrightcoveVideoView
。VideoPlaybackController playbackController = brightcoveVideoView.getPlaybackController();
-
広告の再生を無効にします。
playbackController.setAdsDisabled(true);
- 現在のビデオで目的の時間位置にシークします。
-
通常の広告動作を再開します。
playbackController.setAdsDisabled(false);
あなたのコードは次のようになります:
final VideoPlaybackController playbackController = brightcoveVideoView.getPlaybackController();
eventEmitter.on(EventType.VIDEO_DURATION_CHANGED, new EventListener() {
@Override
public void processEvent(final Event event) {
playbackController.setAdsDisabled(true);
brightcoveVideoView.seekTo(10000);
}
});
eventEmitter.on(EventType.DID_SEEK_TO, new EventListener() {
@Override
public void processEvent(final Event event) {
playbackController.setAdsDisabled(false);
}
});
バッファサイズを設定する
次のセグメントの配信が CDN から遅延する場合は、プレーヤーのバッファリングを排除するために、バッファ長を増やすことを検討してください。しかし、HLS が既に行っていることを手動で行うことはできないかもしれません。
HLS は、すぐにプレイし、維持できない場合は品質を落とせるように設計されています。この方法では、バッファをプリロードする必要はありません。それが追いつかない場合は、中断を防ぐために最高の品質でできるだけ多くのビデオをロードします。
Android v6.3.1 用ネイティブ SDK から、ExoPlayer 2 実装用に SDK に次のクラスが追加されました。
LoadControlConfig
AllocatorConfig
これらのクラスで設定された値は、ExoPlayer DefaultLoadControl
オブジェクトの作成に使用されます。このオブジェクトは、ExoPlayer インスタンスの作成に使用されます。開発者は、次のようにバッファサイズを制御できます。
-
ザ・
LoadControlConfig
そしてAllocatorConfig
クラスはBuilderパターンに従います。両方のクラスで設定できる値は、コンストラクタで設定できる値を反映しています。AllocatorConfig allocatorConfig = new AllocatorConfig.Builder().build(); LoadControlConfig loadControlConfig = new LoadControlConfig.Builder() .setAllocatorConfig(allocatorConfig) .setMinBufferMs(X) .setMaxBufferMs(Y) .build();
-
ビルダーで設定されていない値は、デフォルト値を使用します。を設定するには、
ExoPlayerVideoDisplayerComponent.setLoadControlConfig()
メソッドを使用しますLoadControlConfig
。brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view); ... ExoPlayerVideoDisplayComponent dc = (ExoPlayerVideoDisplayComponent) brightcoveVideoView.getVideoDisplay(); dc.setLoadControlConfig(loadControlConfig);
キャプションとテーマの設定
現在、BrightcoveCaptionPropertiesActivity
は Brightcove Player SDK のマニフェストファイルに設定されているため、開発者はアプリケーションで指定する必要はありません。
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.brightcove.player"
android:versionCode="1"
android:versionName="1.0">
<application>
<!-- If we don't register this Activity in the Manifest, apps using the SDK will crash when they try to access it. -->
<!-- During the app's build process, this manifest will be merged with the app-level one. -->
<activity android:name="com.brightcove.player.captioning.BrightcoveCaptionPropertiesActivity"/>
</application>
</manifest>
でアプリのテーマを設定している限り、BrightcoveCaptionPropertiesActivity
はプラットフォームのデフォルトテーマを継承します。<activity>
アプリのマニフェストのレベル。
<application>
レベルで 1 つのアプリケーションテーマを設定すると、はこのアプリケーションレベルのテーマのプロパティを継承します。BrightcoveCaptionPropertiesActivity
テーマによっては、アクティビティが奇妙にスタイルされたり、読みにくくなることがあります。
そのような場合は、BrightcoveCaptionPropertiesActivity
独自のマニフェストでを指定し、そこにテーマを適用する必要があります。
<activity
android:name="com.brightcove.player.captioning.BrightcoveCaptionPropertiesActivity"
android:theme="@style/MyCustomCaptionSettingsTheme"/>
デフォルトのキャプションを設定する
動画に複数の言語のキャプションが使用されている場合は、再生開始時に初期設定の言語をプログラムで設定できます。コードは次のようになります。
brightcoveVideoView.getEventEmitter().once(EventType.CAPTIONS_LANGUAGES, new EventListener() {
@Override
public void processEvent(Event event) {
brightcoveVideoView.setClosedCaptioningEnabled(true);
brightcoveVideoView.setSubtitleLocale("fr");
}
});
ピークビットレートの設定
プレーヤーでビットレートセレクターを実装するには、次のコードを使用してピークビットレートを設定します。
((ExoPlayerVideoDisplayComponent) videoView.getVideoDisplay()).setPeakBitrate(bitRate);
再生レートの設定
ExoPlayer は、Android デバイスで再生するビデオの再生速度調整をサポートしています。詳しくは、 GoogleのExoPlayerドキュメントでの可変速度再生を参照してください。
再生速度は、次のコードで制御できます。
eventEmitter.on(EventType.DID_PLAY, new EventListener() {
@Override
public void processEvent(Event event) {
//Get instance of ExoPlayer2
ExoPlayerVideoDisplayComponent displayComponent = (ExoPlayerVideoDisplayComponent) brightcoveVideoView.getVideoDisplay();
ExoPlayer exoPlayer = displayComponent.getExoPlayer();
//Set playback speed
PlaybackParameters param = new PlaybackParameters(1.6f, 1.0f);
exoPlayer.setPlaybackParameters(param);
}
});
360° 動画の VR ゴーグルモードの設定
360°ビデオを再生する場合、ユーザーはコントロールバーの [Video 360] ボタンを選択して VR ゴーグルモードに切り替えることができます。いずれかを使用している場合BrightcovePlayer
またはBrightcovePlayerFragment
アクティビティの場合、VRゴーグルモードが有効になっていると、画面の向きが横向きに変わります。
カスタムアクティビティを使用している場合は、以下を追加する必要があります。
brightcoveVideoView.getEventEmitter().on(EventType.CHANGE_ORIENTATION, new EventListener() {
@Override
public void processEvent(Event event) {
int orientation = event.getIntegerProperty(Event.REQUESTED_ORIENTATION);
setRequestedOrientation(orientation);
}
});
動画静止画の表示/非表示
Video Cloud ライブラリからビデオを取得するときのデフォルトの動作では、再生が開始されるまでビデオの静止画像が表示されます。
動画静止画を表示する
あなたはいつでもビデオを放つことによって静止画を表示することができますSET_VIDEO_STILL
とのイベントVIDEO_STILL
プロパティはまだビデオのURIに設定されています。
動画静止画を隠す
ビデオを自動再生する場合は、ビデオの静止画像を非表示にすることができます。これを行うには、次のように、SET_VIDEO_STILL
イベントをリッスンし、デフォルトの動作を防ぐことができます。
brightcoveVideoView.getEventEmitter().on(EventType.SET_VIDEO_STILL, new EventListener() {
@Override
public void processEvent(Event event) {
event.preventDefault();
event.stopPropagation();
}
});
プレーヤーコントロールを表示する
デフォルトでは、プレーヤーコントロールは数秒後に消えます。ユーザーはビデオをタップしてコントロールを表示できます。
ユーザーがビデオをタップするまでプレーヤーコントロールを表示したままにするには、次のように自動非表示機能を無効にすることができます:(必要なコードが強調表示されます)
public class MainActivity extends BrightcovePlayer {
private BrightcoveMediaController controller;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
brightcoveVideoView = (BrightcoveExoPlayerVideoView) findViewById(R.id.brightcove_video_view);
controller = new BrightcoveMediaController(brightcoveVideoView);
controller.setShowHideTimeout(0);
super.onCreate(savedInstanceState);
ビデオの途中で再生を開始する
場合によっては、ビデオの真ん中のどこかから再生を開始する必要があります。これを行うには、BrightCoveVideoView.seekTo()
再生を開始する前にを呼び出すことができます。
catalog.findVideoByID(getString(R.string.videoId), new VideoListener() {
@Override
public void onVideo(Video video) {
Log.v(TAG, "onVideo: video = " + video);
brightcoveVideoView.getEventEmitter().on(EventType.DID_SET_VIDEO, new EventListener() {
@Override
public void processEvent(Event event) {
brightcoveVideoView.seekTo(60000);
brightcoveVideoView.start();
}
});
brightcoveVideoView.add(video);
brightcoveVideoView.pause();
}
});
ビデオのスワップ
この例は、プレーヤーでビデオをスワップする方法の 1 つを示しています。
単一のビデオを使用する
clear()
このメソッドは、現在のビデオをアンロードするときに非同期であるため、プレーヤーに新しいビデオを追加する前に待つ必要があります。ここでは2つの選択肢があります。
-
Video Cloud からビデオをフェッチする時間は、プレイリストを更新する時間を矮小にする必要があるため、次のようなことを試すことができます。
brightcoveVideoView.clear(); catalog.findVideoByID("123456789", new VideoListener() { @Override public void onVideo(final Video video) { brightcoveVideoView.add(video); brightcoveVideoView.start(); } });
-
別のアプローチは、イベントを待つことです:
catalog.findVideoByID("", new VideoListener() { @Override public void onVideo(final Video video) { eventEmitter.once(EventType.DID_CHANGE_LIST, new EventListener() { @Override public void processEvent(Event event) { brightcoveVideoView.add(video); brightcoveVideoView.start(); } }); brightcoveVideoView.clear(); } });
プレイリストの使用
プレイリストで作業している場合は、clear()
メソッドを呼び出すと、プレイリストのすべての要素が削除されることに注意してください。したがって、プレイリストの最初のビデオにジャンプしようとすると、IndexOutOfBounds
例外が発生することがあります。
代わりに、次のようなものを試すことができます:
brightcoveVideoView.pause();
brightcoveVideoView.stopPlayback();
brightcoveVideoView.setCurrentIndex(0);
プレイリストの動画を切り替える
プレイリストを使用している場合は、次のコードを使用して再生リストの動画を切り替えることができます。
private void setupControls(List<Video> videos) {
previousVideoButton = (Button) findViewById(R.id.previous_video_button);
nextVideoButton = (Button) findViewById(R.id.next_video_button);
if (videos != null) {
previousVideoButton.setEnabled(false);
previousVideoButton.setOnClickListener(new 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.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
int index = brightcoveVideoView.getCurrentIndex();
int size = brightcoveVideoView.getList().size();
previousVideoButton.setEnabled(index >= 0);
nextVideoButton.setEnabled((index + 2) < size);
if ((index + 1) < size) {
brightcoveVideoView.setCurrentIndex(index + 1);
}
}
});
}
}