Migration vers le framework ExoPlayer 2

Dans cette rubrique, vous apprendrez comment utiliser le framework ExoPlayer 2 avec le SDK Brightcove Native Player pour Android.

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 :

  1. Dans ton build.gradle fichier, ajoutez la dépendance suivante :
    dependencies {
      implementation "com.brightcove.player:exoplayer2:${anpVersion}"
    }
  2. Réglage de la transitive possibilité de true 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}
    }
  3. 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 :

  1. Dans ton constantes.gradle , mettez à jour la version Android Build Tools :
    buildToolsVersion "28.0.2"
    
  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.

  3. Dans ton build.gradle fichier, ajoutez le dépôt Google Maven :
    maven {
      url 'https://maven.google.com'
    }
    
  4. 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
    
  5. 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.

  6. Réglage de la transitive possibilité de true 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}
    }
  7. 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 :

  1. Dans ton build.gradle fichier, ajoutez la dépendance suivante :
    dependencies {
      implementation "com.brightcove.player:exoplayer2:${anpVersion}"
    }
  2. Réglage de la transitive possibilité de true 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}
    }
  3. 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
  4. 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 autre length 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 :