Aperçu
ExoPlayer de Google est un lecteur multimédia open source au niveau de l'application pour Android. Brightcove utilise ExoPlayer pour profiter des avantages qu'il offre. Pour plus d'informations sur les avantages de la mise à niveau vers ExoPlayer, consultez le SDK natif Brightcove avec ExoPlayer 2 article de blog.
Découvrez comment migrer pour les types de projets suivants :
Se référer au Exemples d'applications ExoPlayer pour des conseils supplémentaires sur l'intégration de la ExoPlayer 2 cadre dans votre projet.
Nouveau projet
Suivez ces étapes pour ajouter ExoPlayer 2 à un nouveau projet Android :
- Dans ton build.gradle fichier, ajoutez la dépendance suivante :
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
- Réglage de la
transitive
possibilité detrue
indique à gradle d'inclure automatiquement d'autres dépendances telles que le plug-in de lecture hors ligne. Si vous utilisez une version gradle inférieure à 5, le dépendances transitives sont désactivés par défaut. Vous devrez donc ajouter la déclaration suivante :dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true} }
- Si vous utilisez une variable d'environnement pour la version SDK, ouvrez le gradle.properties et définissez la valeur de la version actuelle du SDK natif pour Android. Il devrait ressembler à ceci :
anpVersion=6.5.0
Projet ExoPlayer 1 existant
Suivez ces étapes pour mettre à jour un projet ExoPlayer 1 existant afin d'utiliser le framework ExoPlayer 2 :
- Dans ton constantes.gradle , mettez à jour la version Android Build Tools :
buildToolsVersion "28.0.2"
- Dans ton build.gradle fichier, mettez à jour les bibliothèques de support 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}'
Les valeurs actuelles des constantes se trouvent dans le constantes.gradle déposer.
- Dans ton build.gradle fichier, ajoutez le dépôt Google Maven :
maven { url 'https://maven.google.com' }
- Si votre projet utilise la publicité avec Google IMA, mettez à jour les annonces des services Google Play :
implementation 'com.google.android.gms:play-services-ads:'+PLAY_SERVICES_VERSION
- Dans ton build.gradle fichier, où vous avez précédemment importé la bibliothèque Brightcove ExoPlayer en tant que dépendance comme ceci :
dependencies { implementation "com.brightcove.player:exoplayer:${anpVersion}" }
Modifiez le nom de la dépendance :
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
La valeur actuelle de la version Brightcove SDK (
anpVersion
) se trouve dans le gradle.properties déposer. - Réglage de la
transitive
possibilité detrue
indique à gradle d'inclure automatiquement d'autres dépendances telles que le plug-in de lecture hors ligne. Si vous utilisez une version gradle inférieure à 5, le dépendances transitives sont désactivés par défaut. Vous devrez donc ajouter les éléments suivants :dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true} }
- Si vous utilisez une variable d'environnement pour la version SDK, ouvrez le gradle.properties et définissez la valeur de la version actuelle du SDK natif pour Android. Il devrait ressembler à ceci :
anpVersion=6.5.0
Aucun codage supplémentaire ne devrait être requis pour intégrer ExoPlayer 2 dans votre projet.
Projet MediaPlayer existant
Suivez ces étapes pour mettre à jour un projet MediaPlayer existant afin d'utiliser le framework ExoPlayer 2 :
- Dans ton build.gradle fichier, ajoutez la dépendance suivante :
dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" }
- Réglage de la
transitive
possibilité detrue
indique à gradle d'inclure automatiquement d'autres dépendances telles que le plug-in de lecture hors ligne. Si vous utilisez une version gradle inférieure à 5, le dépendances transitives sont désactivés par défaut. Vous devrez donc ajouter les éléments suivants :dependencies { implementation "com.brightcove.player:exoplayer2:${anpVersion}" {transitive = true} }
- Si vous utilisez une variable d'environnement pour la version SDK, ouvrez le gradle.properties et définissez la valeur de la version actuelle du SDK natif pour Android. Il devrait ressembler à ceci :
anpVersion=6.5.0
- Dans votre application, utilisez le BrightcoveExoPlayerVidéoVoir à la place du BrightcoveVidéoVoir , qui utilise Android Media Player.
Changements marquants
Les modifications suivantes apportées au Brightcove Native SDK pour Android sont des modifications majeures avec l'ExoPlayer 2. L'utilisation de l'ExoPlayer 1 a été dépréciée avec le Brightcove Native SDK.
Écouteurs internes ExoPlayerVideoDisplayComponent
Les ExoPlayerVideoDisplayComponent
class vous permet de définir des écouteurs pour obtenir le statut des composants ExoPlayer. Voici une liste de certains des auditeurs :
Définir l'auditeur | Recevoir des informations sur l'état de |
---|---|
setDebugListener | InfoListener |
setCaptionListener | Écouteur de légende |
setMetadataListener | Écouteur de métadonnées |
setInternalErrorListener | InterneErrorListener |
Vous trouverez ci-dessous des recommandations pour l'utilisation de l'ExoPlayer 2.
InfoListener
Pour le InfoListener
interface, les modifications suivantes ont été apportées :
- Les
onAvailableRangeChanged
la méthode a été supprimée - Les
onLoadStarted
la méthode a un autrelength
paramètre
Exemple : ExoPlayerVideoDisplayComponent utilisant 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);
}
Écouteur de légende
Les CaptionListener
l'interface est inchangée.
Exemple : ExoPlayerVideoDisplayComponent utilisant ExoPlayer v2
public interface CaptionListener {
void onCues(List<Cue> cues);
}
Écouteur de métadonnées
Les MetadataListener
l'interface a été introduite avec ExoPlayer v2. L'utilisation antérieure du Id3MetadataListener
est désormais obsolète.
Exemple : ExoPlayerVideoDisplayComponent utilisant ExoPlayer v2
public interface MetadataListener {
void onMetadata(Metadata metadata);
}
Avec le nouveau MetadataListener
vous recevrez un Metadadata
objet dans le onMetadata
rappeler. Avec l'obsolète Id3MetadataListener
, vous avez reçu une liste d'objets Id3Frame. Avec le nouvel auditeur, vous pouvez toujours obtenir une liste de Id3Frame
objets comme indiqué ci-dessous :
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;
}
}
}
});
InterneErrorListener
Les InternalErrorListener
l'interface a de nombreux changements. Veuillez vérifier le code ci-dessous pour comparaison :
ExoPlayerVideoDisplayComponent utilisant 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 utilisant ExoPlayer v1 (obsolète)
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);
}
Lorsque vous utilisez ExoPlayer 2, le type d'exception que vous obtenez onPlayerError(Exception e)
est com.google.android.exoplayer2.ExoPlaybackException
, mais cela peut changer à l'avenir.
En utilisant com.google.android.exoplayer2.ExoPlaybackException, vous pouvez obtenir les types d'exceptions suivants :
ExoPlaybackException.TYPE_SOURCE
ExoPlaybackException.TYPE_RENDERER
ExoPlaybackException.TYPE_UNEXPECTED
Vous pouvez également récupérer la cause de l'erreur en obtenant le Throwable
objet avec ExoPlaybackException.getSourceException()
.
Prise en charge de la lecture hors ligne
Si votre projet utilise le MediaDownloadable.setConfigurationBundle(Bundle)
méthode pour spécifier les préférences de téléchargement telles que le débit vidéo, veuillez mettre à jour votre code comme suit :
Ancien format (obsolète)
com.google.android.exoplayer.MediaFormat
Nouveau format
com.brightcove.player.model.MediaFormat
Classes d'API Media héritées
Les classes d'API Media héritées obsolètes, dans le com.brightcove.player.media package
, ont été supprimés du Brightcove Native SDK pour Android.
Si vous utilisiez les classes Media, vous devez migrer et commencer à utiliser le com.brightcove.player.edge.Catalog
classer.
Les classes suivantes ont été déplacées de com.brightcove.player.media
à com.brightcove.player.model
:
DeliveryType.java
CaptionType.java
ErrorFields.java
VideoFields.java
Ressources additionnelles
Pour plus d'informations sur l'utilisation du framework ExoPlayer 2, consultez les documents suivants :