2017-02-18 2 views
0

J'ai essayé de comprendre comment fonctionne ExoPlayer récemment et d'étudier leur code source.Pourquoi Google ExoPlayer cesse-t-il d'utiliser Android low leve api MediaExtractor?

Dans la partie codage/décodage, j'ai trouvé que TrackRenderer enveloppait l'API de bas niveau de la classe MediaCodec et l'utilisait pour décoder/encoder les données.

Mais pour la partie Extraction, je trouve seulement une classe -> FrameWorkSampleSource.java qui utilise l'API de bas niveau MediaExtractor, et son obsolète, même disparu dans ExoPlayer 2.0.

Y a-t-il une raison pour laquelle exoplayer n'utilise pas cette API de bas niveau pour extraire des données de la source? Je pensais que c'est le seul moyen d'extraire des données multimédia dans un appareil Android .....

Merci

Répondre

1

ExoPlayer utilise des extracteurs personnalisés écrits en Java, voir this package.

Quant à savoir pourquoi:

Il y a quelques raisons:

  • MediaExtractor utilise un modèle de thread qui n'est pas bien adapté à ExoPlayer.
  • Il ne fournit pas non plus autant de contrôle sur la mise en mémoire tampon que nous aimerions que .
  • La mise en œuvre des extracteurs sous MediaExtractor varie selon les versions d'Android.
  • Extracteurs sous MediaExtractor manquent certaines fonctionnalités que nous sommes en mesure de prendre en charge dans ExoPlayer extracteurs.

Voir https://github.com/google/ExoPlayer/issues/2580