Ü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:
- In deiner build.gradle fügen Sie die folgende Abhängigkeit hinzu:
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
- Einstellen der
transitive
Option zutrue
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} }
- 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:
- In deiner Konstanten.gradle Datei, aktualisieren Sie die Android Build Tools-Version:
buildToolsVersion "28.0.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.
- In deiner build.gradle Datei, fügen Sie das Google Maven Repository hinzu:
maven { url 'https://maven.google.com' }
- 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
- 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. - Einstellen der
transitive
Option zutrue
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} }
- 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:
- In deiner build.gradle fügen Sie die folgende Abhängigkeit hinzu:
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
- Einstellen der
transitive
Option zutrue
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} }
- 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
- 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ätzlichelength
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: