|
@@ -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.
|