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

    ExoPlayer2フレームワークへの移行

    このトピックでは、Android用のBrightcove Native PlayerSDKでExoPlayer2フレームワークを使用する方法を学習します。

    概要

    GoogleのExoPlayerは、Android用のオープンソース、アプリケーションレベルのメディアプレーヤーです。Brightcoveは ExoPlayer を活用して、提供するメリットを活用しています。ExoPlayer にアップグレードする利点の詳細については、Brightcoveのネイティブ SDK と exoPlayer 2 のブログ記事を参照してください。

    次のプロジェクトタイプで移行する方法を学びます。

    を参照してくださいExoPlayerサンプルアプリケーション統合に関する追加のガイダンスについてはExoPlayer 2プロジェクトへのフレームワーク。

    新しいプロジェクト

    以下の手順に従って、新しい Android プロジェクトに exoPlayer 2 を追加します。

    1. build.gradleファイルで、次の依存関係を追加します。
      dependencies {
        implementation "com.brightcove.player:exoplayer2:${anpVersion}"
      }
    2. transitiveオプションを設定すると、trueオフライン再生プラグインなどの他の依存関係を自動的に含めるようにgradleに指示します。5未満のgradleバージョンを使用している場合、推移的な依存関係はデフォルトでオフになっています。したがって、次のステートメントを追加する必要があります。
      dependencies {
        implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true}
      }
    3. SDK バージョンに環境変数を使用している場合は、 gradle.properties ファイルを開き、Android 用 Native SDK の現在のバージョン値を設定します。これは次のようになります。
      anpVersion=6.5.0

    既存の exoPlayer 1 プロジェクト

    ExoPlayer 2 フレームワークを使用するように既存の ExoPlayer 1 プロジェクトを更新するには、次の手順に従います。

    1. constants.gradleファイルで、Androidビルドツールのバージョンを更新します:
      buildToolsVersion "28.0.2"
      
    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ファイルに見つけることができます

    3. build.gradleファイルで、GoogleのMavenリポジトリを追加します。
      maven {
        url 'https://maven.google.com'
      }
      
    4. プロジェクトで Google IMA で広告を使用している場合は、Google Play サービス広告を更新してください。
      implementation 'com.google.android.gms:play-services-ads:'+PLAY_SERVICES_VERSION
      
    5. build.gradle ファイルで、以前に次のような依存関係として Brightcove ExoPlayer ライブラリをインポートしました。
      dependencies {
        implementation "com.brightcove.player:exoplayer:${anpVersion}"
      }
      

      依存関係の名前を変更します。

      dependencies {
        implementation "com.brightcove.player:exoplayer2:${anpVersion}"
      }
      

      Brightcove SDK バージョン ( anpVersion ) の現在の値は、 gradle.properties ファイルにあります。

    6. transitiveオプションを設定すると、trueオフライン再生プラグインなどの他の依存関係を自動的に含めるようにgradleに指示します。5未満のgradleバージョンを使用している場合、推移的な依存関係はデフォルトでオフになっています。したがって、次のものを追加する必要があります。
      dependencies {
      	implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true}
      }
    7. SDK バージョンに環境変数を使用している場合は、 gradle.properties ファイルを開き、Android 用 Native SDK の現在のバージョン値を設定します。これは次のようになります。
      anpVersion=6.5.0

      ExoPlayer 2 をプロジェクトに統合するために、追加のコーディングは必要ありません。

    既存の MediaPlayer プロジェクト

    ExoPlayer 2 フレームワークを使用するように既存の MediaPlayer プロジェクトを更新するには、次の手順に従います。

    1. build.gradleファイルで、次の依存関係を追加します。
      dependencies {
        implementation "com.brightcove.player:exoplayer2:${anpVersion}"
      }
    2. transitiveオプションを設定すると、trueオフライン再生プラグインなどの他の依存関係を自動的に含めるようにgradleに指示します。5未満のgradleバージョンを使用している場合、推移的な依存関係はデフォルトでオフになっています。したがって、次のものを追加する必要があります。
      dependencies {
        implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true}
      }
    3. SDK バージョンに環境変数を使用している場合は、 gradle.properties ファイルを開き、Android 用 Native SDK の現在のバージョン値を設定します。これは次のようになります。
      anpVersion=6.5.0
    4. アプリで、 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 フレームワークの使用の詳細については、次のドキュメントを参照してください。


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