Migration zum ExoPlayer 2-Framework

In diesem Thema erfahren Sie, wie Sie das ExoPlayer 2-Framework mit dem Brightcove Native Player SDK für Android verwenden können.

Überblick

Googles ExoPlayer ist ein Open-Source-Mediaplayer auf Anwendungsebene für Android. Brightcove nutzt den ExoPlayer, um die Vorteile zu nutzen, die er bietet. Weitere Informationen zu den Vorteilen eines Upgrades auf den ExoPlayer finden Sie im Brightcove Natives SDK mit ExoPlayer 2 Blogeintrag.

Erfahren Sie, wie Sie für die folgenden Projekttypen migrieren:

Siehe die ExoPlayer-Beispielanwendungen für zusätzliche Anleitungen zur Integration der ExoPlayer 2 Rahmen in Ihr Projekt.

Neues Projekt

Befolgen Sie diese Schritte, um ExoPlayer 2 zu einem neuen Android-Projekt hinzuzufügen:

  1. In deiner build.gradle fügen Sie die folgende Abhängigkeit hinzu:
    dependencies {
      implementation "com.brightcove.player:exoplayer2:${anpVersion}"
    }
  2. Einstellen der transitive Option zu true weist gradle an, automatisch andere Abhängigkeiten wie das Offline-Playback-Plugin einzuschließen. Wenn Sie eine Gradle-Version unter 5 verwenden, wird die transitive Abhängigkeiten sind standardmäßig deaktiviert. Sie müssen also die folgende Anweisung hinzufügen:
    dependencies {
      implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true}
    }
  3. Wenn Sie eine Umgebungsvariable für die SDK-Version verwenden, öffnen Sie die gradle.eigenschaften Datei und legen Sie den aktuellen Versionswert für das Native SDK für Android fest. Es sollte ähnlich aussehen wie folgt:
    anpVersion=6.5.0

Vorhandenes ExoPlayer 1-Projekt

Befolgen Sie diese Schritte, um ein vorhandenes ExoPlayer 1-Projekt so zu aktualisieren, dass es das ExoPlayer 2-Framework verwendet:

  1. In deiner Konstanten.gradle Datei, aktualisieren Sie die Android Build Tools-Version:
    buildToolsVersion "28.0.2"
    
  2. In deiner build.gradle Datei, Android-Supportbibliotheken aktualisieren:
    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}'
    

    Die aktuellen Werte für die Konstanten finden Sie im Konstanten.gradle Datei.

  3. In deiner build.gradle Datei, fügen Sie das Google Maven Repository hinzu:
    maven {
      url 'https://maven.google.com'
    }
    
  4. Wenn Ihr Projekt Werbung mit Google IMA verwendet, aktualisieren Sie Google Play Services Ads:
    implementation 'com.google.android.gms:play-services-ads:'+PLAY_SERVICES_VERSION
    
  5. In deiner build.gradle Datei, in die Sie zuvor die Brightcove ExoPlayer-Bibliothek wie folgt als Abhängigkeit importiert haben:
    dependencies {
      implementation "com.brightcove.player:exoplayer:${anpVersion}"
    }
    

    Ändern Sie den Namen der Abhängigkeit:

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

    Der aktuelle Wert für die Brightcove SDK-Version (anpVersion ) finden Sie im gradle.eigenschaften Datei.

  6. Einstellen der transitive Option zu true weist gradle an, automatisch andere Abhängigkeiten wie das Offline-Playback-Plugin einzuschließen. Wenn Sie eine Gradle-Version unter 5 verwenden, wird die transitive Abhängigkeiten sind standardmäßig deaktiviert. Sie müssen also Folgendes hinzufügen:
    dependencies {
    	implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true}
    }
  7. Wenn Sie eine Umgebungsvariable für die SDK-Version verwenden, öffnen Sie die gradle.eigenschaften Datei und legen Sie den aktuellen Versionswert für das Native SDK für Android fest. Es sollte ähnlich aussehen wie folgt:
    anpVersion=6.5.0

    Es sollte keine zusätzliche Codierung erforderlich sein, um ExoPlayer 2 in Ihr Projekt zu integrieren.

Vorhandenes MediaPlayer-Projekt

Befolgen Sie diese Schritte, um ein vorhandenes MediaPlayer-Projekt zu aktualisieren, um das ExoPlayer 2-Framework zu verwenden:

  1. In deiner build.gradle fügen Sie die folgende Abhängigkeit hinzu:
    dependencies {
      implementation "com.brightcove.player:exoplayer2:${anpVersion}"
    }
  2. Einstellen der transitive Option zu true weist gradle an, automatisch andere Abhängigkeiten wie das Offline-Playback-Plugin einzuschließen. Wenn Sie eine Gradle-Version unter 5 verwenden, wird die transitive Abhängigkeiten sind standardmäßig deaktiviert. Sie müssen also Folgendes hinzufügen:
    dependencies {
      implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true}
    }
  3. Wenn Sie eine Umgebungsvariable für die SDK-Version verwenden, öffnen Sie die gradle.eigenschaften Datei und legen Sie den aktuellen Versionswert für das Native SDK für Android fest. Es sollte ähnlich aussehen wie folgt:
    anpVersion=6.5.0
  4. Verwenden Sie in Ihrer App die BrightcoveExoPlayerVideoView anstatt der BrightcoveVideoView , die den Android Media Player verwendet.

Breaking Changes

Die folgenden Änderungen am Brightcove Native SDK für Android sind bahnbrechende Änderungen mit dem ExoPlayer 2. Die Verwendung von ExoPlayer 1 mit dem Brightcove Native SDK ist veraltet.

ExoPlayerVideoDisplayComponent interne Listener

Die ExoPlayerVideoDisplayComponent -Klasse können Sie Listener festlegen, um den Status der ExoPlayer-Komponenten abzurufen. Unten ist eine Liste einiger der Hörer:

Hörer einstellen Erhalten Sie Statusinformationen über
setDebugListener InfoListener
setCaptionListener BildunterschriftListener
setMetadataListener MetadatenListener
setInternalErrorListener InternalErrorListener

Nachfolgend finden Sie Empfehlungen für die Verwendung des ExoPlayer 2.

InfoListener

Für die InfoListener Schnittstelle wurden folgende Änderungen vorgenommen:

  • Die onAvailableRangeChanged Methode wurde entfernt
  • Die onLoadStarted Methode hat eine zusätzliche length Parameter

Beispiel: ExoPlayerVideoDisplayComponent mit 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);
}

BildunterschriftListener

Die CaptionListener Schnittstelle ist unverändert.

Beispiel: ExoPlayerVideoDisplayComponent mit ExoPlayer v2

public interface CaptionListener {
void onCues(List<Cue> cues);
}

MetadatenListener

Die MetadataListener Schnittstelle wurde mit ExoPlayer v2 eingeführt. Die vorherige Verwendung des Id3MetadataListener ist jetzt veraltet.

Beispiel: ExoPlayerVideoDisplayComponent mit ExoPlayer v2

public interface MetadataListener {
void onMetadata(Metadata metadata);
}

Mit dem neuen MetadataListener du erhältst a Metadadata Objekt in der onMetadata zurückrufen. Mit dem veralteten Id3MetadataListener , haben Sie eine Liste von Id3Frame-Objekten erhalten. Mit dem neuen Hörer können Sie immer noch eine Liste von Id3Frame Objekte wie unten gezeigt:

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

Die InternalErrorListener Schnittstelle hat viele Änderungen. Bitte überprüfen Sie den folgenden Code zum Vergleich:

ExoPlayerVideoDisplayComponent mit ExoPlayer 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);
}

ExoPlayerVideoDisplayComponent mit ExoPlayer v1 (veraltet)

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);
}

Wenn Sie ExoPlayer 2 verwenden, erhalten Sie die Art der Ausnahme, in der Sie onPlayerError(Exception e) ist com.google.android.exoplayer2.ExoPlaybackException , aber das kann sich in Zukunft ändern.

Mit com.google.android.exoplayer2.ExoPlaybackException können Sie die folgenden Ausnahmetypen abrufen:

  • ExoPlaybackException.TYPE_SOURCE
  • ExoPlaybackException.TYPE_RENDERER
  • ExoPlaybackException.TYPE_UNEXPECTED

Sie können die Fehlerursache auch abrufen, indem Sie die Throwable Objekt mit ExoPlaybackException.getSourceException().

Unterstützung für Offline-Wiedergabe

Wenn Ihr Projekt die . verwendet MediaDownloadable.setConfigurationBundle(Bundle) Methode, um die Download-Einstellungen wie die Video-Bitrate anzugeben, dann aktualisieren Sie Ihren Code bitte wie folgt:

Altes Format (eingestellt)

com.google.android.exoplayer.MediaFormat

Neues Format

com.brightcove.player.model.MediaFormat

Legacy Media API-Klassen

Die veralteten Medien-API-Klassen in der com.brightcove.player.media package , wurden aus dem Brightcove Native SDK für Android entfernt.

Wenn Sie die Medienklassen verwendet haben, müssen Sie migrieren und mit der Verwendung beginnen com.brightcove.player.edge.Catalog Klasse.

Die folgenden Klassen wurden verschoben von com.brightcove.player.media zu com.brightcove.player.model:

  • DeliveryType.java
  • CaptionType.java
  • ErrorFields.java
  • VideoFields.java

Zusätzliche Ressourcen

Weitere Informationen zur Verwendung des ExoPlayer 2-Frameworks finden Sie in den folgenden Dokumenten: