ソースを参照

chapters/other_android_mediacodec: ajout des sources du chapitre

Alexandre Janniaux 7 年 前
コミット
21798f162c
1 ファイル変更64 行追加0 行削除
  1. 64 0
      chapters/other_android_mediacodec.tex

+ 64 - 0
chapters/other_android_mediacodec.tex

@@ -0,0 +1,64 @@
+\section{Cadre du projet}
+
+La mission s'inscrivait dans le cadre de la diffusion d'un flux vidéo vers un
+chromecast. Il s'avère que le chromecast ne supporte pas de recevoir des flux de
+sous-titre, ou alors certains formats seulement. Ceci parce qu'il était à la
+base prévu pour Youtube qui n'est jamais très loin du format Webm. 
+
+Le webm est un format utilisant une sous-partie du format Matroska, en étant
+spécialement dédié à la diffusion de vidéo sur le web et dans un navigateur.
+
+L'idée pour intégrer les sous-titres lors de la diffusion est donc de démuxer
+les fichiers, puis de rendre ces sous-titres avant directement sur la vidéo
+avant de remuxer puis envoyer au chromecast, le tout en temps réel.
+
+Lors de la diffusion d'une vidéo depuis un téléphone, on tombe alors sur un
+nouveau problème: l'usage de la batterie. Décoder et réencoder de la vidéo
+consomme beaucoup de CPU et le téléphone finit par chauffer et se décharger très
+vite.
+
+On peut alors utiliser plutôt les circuits d'encodage intégrés sur presque tous
+les téléphones. Ces derniers consomment beaucoup moins d'énergie que leur
+pendant logiciel, mais leurs fonctionnalités sont matériellement figées dans les
+circuits qui les composent. Ils sont également limités en nombre de session
+possible, et peuvent avoir des comportements différents entre chaque téléphone
+ou faire crasher le programme, voire le téléphone en cas d'utilisation
+incorrecte.
+
+% TODO: reference MediaCodec
+Pour les téléphones Android, c'est l'API MediaCodec qu'il faut utiliser afin de
+manipuler les décodeurs/encodeurs disponibles sur le téléphone. Un décodeur
+MediaCodec étant déjà existant, il s'agit plus ou moins d'étendre les
+fonctionnalités déjà en place pour pouvoir également instancier un encodeur.
+
+Dans cette partie-là, nous allons voir ce qu'est un encodeur, comment ils sont
+construits et utilisés au sein de VLC ainsi que quelques détails de
+l'implémentation finale de l'encodeur utilisant l'API MediaCodec d'Android.
+
+\section{Qu'est-ce qu'un encodeur}
+
+% TODO: rôle dans la chaine avec schéma
+% TODO: codec specific data
+% TODO: état de l'encodeur
+% TODO: flux de données
+
+\section{Fonctionnement d'un encodeur dans VLC}
+
+Dans VLC, l'encodeur est principalement utilisé par un seul module: le module
+«transcode». À ce jour, il utilise un flux multimédia complet en entrée,
+c'est-à-dire plusieurs «elementary streams» que sont les les sous-titres, les
+flux vidéos et les flux audios. Il produit ensuite le même flux multimédia
+encodé par un muxer.
+
+% TODO: exemple d'utilisation du module transcode en console
+
+L'encodeur est définit par la structure suivante dans le core de VLC.
+
+% TODO: structure de l'encodeur
+
+\section{Implémentation de l'encodeur}
+
+Des problèmes arrivent dès le début de l'implémentation. Il n'est en effet pas
+possible de modifier le format de sortie de l'encodeur après son Open. Or les
+informations sur le codec -- codec specific data -- ne sont disponibles qu'après
+avoir commencé à encoder les premières images.