概要
GoogleのExoPlayerは、Android用のオープンソース、アプリケーションレベルのメディアプレーヤーです。Brightcoveは ExoPlayer を活用して、提供するメリットを活用しています。ExoPlayer にアップグレードする利点の詳細については、Brightcoveのネイティブ SDK と exoPlayer 2 のブログ記事を参照してください。
次のプロジェクトタイプで移行する方法を学びます。
を参照してくださいExoPlayerサンプルアプリケーション統合に関する追加のガイダンスについてはExoPlayer 2プロジェクトへのフレームワーク。
新しいプロジェクト
以下の手順に従って、新しい Android プロジェクトに exoPlayer 2 を追加します。
- build.gradleファイルで、次の依存関係を追加します。
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
transitive
オプションを設定すると、true
オフライン再生プラグインなどの他の依存関係を自動的に含めるようにgradleに指示します。5未満のgradleバージョンを使用している場合、推移的な依存関係はデフォルトでオフになっています。したがって、次のステートメントを追加する必要があります。dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true} }
- SDK バージョンに環境変数を使用している場合は、 gradle.properties ファイルを開き、Android 用 Native SDK の現在のバージョン値を設定します。これは次のようになります。
anpVersion=6.5.0
既存の exoPlayer 1 プロジェクト
ExoPlayer 2 フレームワークを使用するように既存の ExoPlayer 1 プロジェクトを更新するには、次の手順に従います。
- constants.gradleファイルで、Androidビルドツールのバージョンを更新します:
buildToolsVersion "28.0.2"
- build.gradleファイルで、Androidサポートライブラリを更新します。
implementation 'com.android.support:appcompat-v7:${APPCOMPAT_V7_VERSION}' implementation 'com.android.support:support-v4:${SUPPORT_V4_VERSION}' implementation 'com.android.support:recyclerview-v7:${SUPPORT_V4_VERSION}' implementation 'com.android.support:support-vector-drawable:${SUPPORT_V4_VERSION}'
定数の現在の値は、 constants.gradleファイルに見つけることができます。
- build.gradleファイルで、GoogleのMavenリポジトリを追加します。
maven { url 'https://maven.google.com' }
- プロジェクトで Google IMA で広告を使用している場合は、Google Play サービス広告を更新してください。
implementation 'com.google.android.gms:play-services-ads:'+PLAY_SERVICES_VERSION
- build.gradle ファイルで、以前に次のような依存関係として Brightcove ExoPlayer ライブラリをインポートしました。
dependencies { implementation "com.brightcove.player:exoplayer:${anpVersion}" }
依存関係の名前を変更します。
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
Brightcove SDK バージョン (
anpVersion
) の現在の値は、 gradle.properties ファイルにあります。 transitive
オプションを設定すると、true
オフライン再生プラグインなどの他の依存関係を自動的に含めるようにgradleに指示します。5未満のgradleバージョンを使用している場合、推移的な依存関係はデフォルトでオフになっています。したがって、次のものを追加する必要があります。dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true} }
- SDK バージョンに環境変数を使用している場合は、 gradle.properties ファイルを開き、Android 用 Native SDK の現在のバージョン値を設定します。これは次のようになります。
anpVersion=6.5.0
ExoPlayer 2 をプロジェクトに統合するために、追加のコーディングは必要ありません。
既存の MediaPlayer プロジェクト
ExoPlayer 2 フレームワークを使用するように既存の MediaPlayer プロジェクトを更新するには、次の手順に従います。
- build.gradleファイルで、次の依存関係を追加します。
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
transitive
オプションを設定すると、true
オフライン再生プラグインなどの他の依存関係を自動的に含めるようにgradleに指示します。5未満のgradleバージョンを使用している場合、推移的な依存関係はデフォルトでオフになっています。したがって、次のものを追加する必要があります。dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true} }
- SDK バージョンに環境変数を使用している場合は、 gradle.properties ファイルを開き、Android 用 Native SDK の現在のバージョン値を設定します。これは次のようになります。
anpVersion=6.5.0
- アプリで、 BrightcoveExoPlayerVideoViewの代わりにBrightcoveVideoView、Android MediaPlayerを使用します。
変更を破る
Android 版 Brightcove ネイティブ SDK に対する以下の変更により、ExoPlayer 2 の変更が壊れています。Brightcoveのネイティブ SDK では、ExoPlayer 1 の使用が廃止されました。
exoPlayerVideoDisplayComponent 内部リスナー
ExoPlayerVideoDisplayComponent
クラスを使用すると、ExoPlayer コンポーネントのステータスを取得するようにリスナーを設定できます。以下は、リスナーのいくつかのリストです:
リスナーを設定する | に関するステータス情報を受け取る |
---|---|
setデバッグリスナー | infolistener |
setCaptionリスナー | キャプションリスナー |
setMetadatalistener | Metadatalistener |
SetInternalErrorListener | InternalErrorListener |
以下は、ExoPlayer 2 の使用に関する推奨事項です。
infolistener
InfoListener
インターフェイスでは、次の変更が加えられました。
onAvailableRangeChanged
メソッドが削除されましたonLoadStarted
メソッドには、length
追加のパラメータがあります
例:exoPlayerVideoDisplayerComponent exoPlayer 2を使っている
public interface InfoListener {
void onVideoFormatEnabled(Format format, int trigger, long mediaTimeMs);
void onAudioFormatEnabled(Format format, int trigger, long mediaTimeMs);
void onDroppedFrames(int count, long elapsed);
void onBandwidthSample(int elapsedMs, long bytes, long bitrateEstimate);
void onLoadStarted(int sourceId, int type, int trigger, Format format,
long mediaStartTimeMs, long mediaEndTimeMs);
void onLoadCompleted(int sourceId, long bytesLoaded, int type, int trigger, Format format,
long mediaStartTimeMs, long mediaEndTimeMs, long elapsedRealtimeMs, long loadDurationMs);
void onDecoderInitialized(String decoderName, long initializedTimestampMs,
long initializationDurationMs);
}
キャプションリスナー
CaptionListener
インターフェイスは変更されません。
例:exoPlayerVideoDisplayer v2 を使っているコンポーネント
public interface CaptionListener {
void onCues(List<Cue> cues);
}
Metadatalistener
MetadataListener
インターフェイスは exoPlayer v2 で導入されました。Id3MetadataListener
以前の使用は廃止されました。
例:exoPlayerVideoDisplayer v2 を使っているコンポーネント
public interface MetadataListener {
void onMetadata(Metadata metadata);
}
新しいとMetadataListener
あなたは受け取るでしょうMetadadata
のオブジェクトonMetadata
折り返し電話。非推奨ではId3MetadataListener
、Id3Frame オブジェクトのリストを受け取りました。以下に示すように、新しいリスナーを使用すると、Id3Frame
まだオブジェクトのリストを取得することができます。
exoPlayerVideoDisplayComponent.setMetadataListener(new ExoPlayerVideoDisplayComponent.MetadataListener() {
@Override
public void onMetadata(Metadata metadata) {
for(int i = 0; i < metadata.length(); i++) {
Metadata.Entry entry = metadata.get(i);
if (entry instanceof Id3Frame) {
Id3Frame id3Frame = (Id3Frame) entry;
}
}
}
});
InternalErrorListener
InternalErrorListener
インターフェイスには多くの変更点があります。比較については、以下のコードをご確認ください。
exoPlayerVideoDisplayer v2 を使っているコンポーネント
public interface InternalErrorListener {
void onPlayerError(Exception e);
void onAudioTrackUnderrun(int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs);
void onLoadError(int sourceId, IOException e);
void onDrmSessionManagerError(Exception e);
}
exoPlayerVideoDisplayer v1 を使用するコンポーネント ( 非推奨 )
public interface InternalErrorListener {
void onRendererInitializationError(Exception e);
void onAudioTrackInitializationError(AudioTrack.InitializationException e);
void onAudioTrackWriteError(AudioTrack.WriteException e);
void onAudioTrackUnderrun(int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs);
void onDecoderInitializationError(MediaCodecTrackRenderer.DecoderInitializationException e);
void onCryptoError(MediaCodec.CryptoException e);
void onLoadError(int sourceId, IOException e);
void onDrmSessionManagerError(Exception e);
}
ExoPlayer 2 を使用する場合、onPlayerError(Exception e)
発生する例外の種類はですがcom.google.android.exoplayer2.ExoPlaybackException
、これは将来変更される可能性があります。
com.google.android.exoPlayer2.expackException を使用すると、次の例外タイプを取得できます。
ExoPlaybackException.TYPE_SOURCE
ExoPlaybackException.TYPE_RENDERER
ExoPlaybackException.TYPE_UNEXPECTED
Throwable
でオブジェクトを取得することで、エラーの原因を取得することもできますExoPlaybackException.getSourceException()
。
オフライン再生のサポート
プロジェクトで、MediaDownloadable.setConfigurationBundle(Bundle)
ビデオビットレートなどのダウンロード設定を指定する方法を使用している場合は、次のようにコードを更新してください。
古い形式 (非推奨)
com.google.android.exoplayer.MediaFormat
新しいフォーマット
com.brightcove.player.model.MediaFormat
レガシーメディア API クラス
で廃止されたレガシー Media API クラスは、Android 用 Brightcove ネイティブ SDK から削除されました。com.brightcove.player.media package
Media クラスを使用していた場合は、クラスを移行して使用を開始する必要があります。com.brightcove.player.edge.Catalog
com.brightcove.player.media
次のクラスがからに移動されましたcom.brightcove.player.model
:
DeliveryType.java
CaptionType.java
ErrorFields.java
VideoFields.java
その他のリソース
ExoPlayer 2 フレームワークの使用の詳細については、次のドキュメントを参照してください。