Resumen
ExoPlayer de Google es un reproductor multimedia de código abierto a nivel de aplicación para Android. Brightcove aprovecha ExoPlayer para aprovechar los beneficios que ofrece. Para obtener más información sobre los beneficios de actualizar a ExoPlayer, consulte la SDK nativo de Brightcove con ExoPlayer 2 entrada en el blog.
Aprenda a migrar para los siguientes tipos de proyectos:
Referirse a Aplicaciones de muestra de ExoPlayer para obtener orientación adicional sobre la integración del ExoPlayer 2 framework en tu proyecto.
Nuevo proyecto
Siga estos pasos para agregar ExoPlayer 2 a un nuevo proyecto de Android:
- En tus build.gradle archivo, agregue la siguiente dependencia:
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
- Establecer el
transitive
opción atrue
le dice a Gradle que incluya automáticamente otras dependencias, como el complemento de reproducción sin conexión. Si está utilizando una versión de Gradle menor que 5, el dependencias transitivas están desactivados de forma predeterminada. Por lo tanto, deberá agregar la siguiente declaración:dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true} }
- Si está utilizando una variable de entorno para la versión del SDK, abra el gradle.properties y establezca el valor de la versión actual del SDK nativo para Android. Debería ser similar a este:
anpVersion=6.5.0
Proyecto ExoPlayer 1 existente
Siga estos pasos para actualizar un proyecto de ExoPlayer 1 existente para usar el marco de ExoPlayer 2:
- En tus constants.gradle archivo, actualice la versión de Android Build Tools:
buildToolsVersion "28.0.2"
- En tus build.gradle archivo, actualice las bibliotecas de soporte de 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}'
Los valores actuales de las constantes se pueden encontrar en la constants.gradle expediente.
- En tus build.gradle archivo, agregue el repositorio de Google Maven:
maven { url 'https://maven.google.com' }
- Si su proyecto utiliza publicidad con Google IMA, actualice Google Play Services Ads:
implementation 'com.google.android.gms:play-services-ads:'+PLAY_SERVICES_VERSION
- En tus build.gradle archivo, donde previamente importó la biblioteca Brightcove ExoPlayer como una dependencia como esta:
dependencies { implementation "com.brightcove.player:exoplayer:${anpVersion}" }
Cambie el nombre de la dependencia:
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
El valor actual de la versión Brightcove SDK (
anpVersion
) se puede encontrar en el gradle.properties expediente. - Establecer el
transitive
opción atrue
le dice a Gradle que incluya automáticamente otras dependencias, como el complemento de reproducción sin conexión. Si está utilizando una versión de Gradle menor que 5, el dependencias transitivas están desactivados de forma predeterminada. Por lo tanto, deberá agregar lo siguiente:dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true} }
- Si está utilizando una variable de entorno para la versión del SDK, abra el gradle.properties y establezca el valor de la versión actual del SDK nativo para Android. Debería ser similar a este:
anpVersion=6.5.0
No debería requerirse codificación adicional para integrar ExoPlayer 2 en su proyecto.
Proyecto de MediaPlayer existente
Siga estos pasos para actualizar un proyecto de MediaPlayer existente para usar el marco ExoPlayer 2:
- En tus build.gradle archivo, agregue la siguiente dependencia:
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
- Establecer el
transitive
opción atrue
le dice a Gradle que incluya automáticamente otras dependencias, como el complemento de reproducción sin conexión. Si está utilizando una versión de Gradle menor que 5, el dependencias transitivas están desactivados de forma predeterminada. Por lo tanto, deberá agregar lo siguiente:dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true} }
- Si está utilizando una variable de entorno para la versión del SDK, abra el gradle.properties y establezca el valor de la versión actual del SDK nativo para Android. Debería ser similar a este:
anpVersion=6.5.0
- En su aplicación, use el BrightcoveExoPlayerVideoView en vez de BrightcoveVideoView , que utiliza Android Media Player.
Rompiendo cambios
Los siguientes cambios en Brightcove Native SDK para Android son cambios importantes con ExoPlayer 2. El uso de ExoPlayer 1 ha quedado obsoleto con Brightcove Native SDK.
Oyentes internos de ExoPlayerVideoDisplayComponent
La ExoPlayerVideoDisplayComponent
class le permite configurar oyentes para obtener el estado de los componentes de ExoPlayer. A continuación se muestra una lista de algunos de los oyentes:
Establecer el oyente | Recibir información de estado sobre |
---|---|
setDebugListener | InfoListener |
setCaptionListener | CaptionListener |
setMetadataListener | MetadataListener |
setInternalErrorListener | InternalErrorListener |
A continuación se presentan recomendaciones para usar ExoPlayer 2.
InfoListener
Para el InfoListener
interfaz, se realizaron los siguientes cambios:
- La
onAvailableRangeChanged
el método fue eliminado - La
onLoadStarted
El método tiene un adicionallength
parámetro
Ejemplo: ExoPlayerVideoDisplayComponent usando 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
La CaptionListener
la interfaz no ha cambiado.
Ejemplo: ExoPlayerVideoDisplayComponent usando ExoPlayer v2
public interface CaptionListener {
void onCues(List<Cue> cues);
}
MetadataListener
La MetadataListener
La interfaz se introdujo con ExoPlayer v2. El uso anterior del Id3MetadataListener
ahora está en desuso.
Ejemplo: ExoPlayerVideoDisplayComponent usando ExoPlayer v2
public interface MetadataListener {
void onMetadata(Metadata metadata);
}
Con el nuevo MetadataListener
recibirás un Metadadata
objeto en el onMetadata
llamar de vuelta. Con el desaprobado Id3MetadataListener
, recibió una lista de objetos Id3Frame. Con el nuevo oyente, aún puede obtener una lista de Id3Frame
objetos como se muestra a continuación:
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
La InternalErrorListener
La interfaz tiene muchos cambios. Por favor, consulte el código a continuación para comparar:
ExoPlayerVideoDisplayComponent usando 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 usando ExoPlayer v1 (obsoleto)
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);
}
Al usar ExoPlayer 2, el tipo de excepción que obtiene onPlayerError(Exception e)
es com.google.android.exoplayer2.ExoPlaybackException
, pero esto puede cambiar en el futuro.
Al usar com.google.android.exoplayer2.ExoPlaybackException, puede obtener los siguientes tipos de excepción:
ExoPlaybackException.TYPE_SOURCE
ExoPlaybackException.TYPE_RENDERER
ExoPlaybackException.TYPE_UNEXPECTED
También puede recuperar la causa del error obteniendo el Throwable
objeto con ExoPlaybackException.getSourceException()
.
Soporte de reproducción sin conexión
Si su proyecto utiliza el MediaDownloadable.setConfigurationBundle(Bundle)
método para especificar las preferencias de descarga, como la tasa de bits de video, luego actualice su código de la siguiente manera:
Formato antiguo (obsoleto)
com.google.android.exoplayer.MediaFormat
Nuevo formato
com.brightcove.player.model.MediaFormat
Clases de API de medios heredados
Las clases de API de medios heredadas en desuso, en el com.brightcove.player.media package
, se eliminaron del SDK nativo de Brightcove para Android.
Si estaba usando las clases de medios, debe migrar y comenzar a usar las com.brightcove.player.edge.Catalog
clase.
Las siguientes clases se movieron de com.brightcove.player.media
a com.brightcove.player.model
:
DeliveryType.java
CaptionType.java
ErrorFields.java
VideoFields.java
Recursos adicionales
Para obtener más información sobre el uso del marco ExoPlayer 2, consulte los siguientes documentos: