Pourquoi ma vidéo est-elle en retard sur l’audio lorsque je la lis sur mon téléphone Android ?


C'est la façon dont Android lit la vidéo. Cela signifie probablement que votre appareil Android est sous-puissant pour ce type de vidéo. Je n'ai pas analysé Android à ce sujet récemment, car mes appareils ont été suffisamment rapides pour ne pas poser de problème.

Problèmes de synchronisation statique


Si vous constatez un retard entre l'audio et la vidéo qui est fixe, cela pourrait être un défaut dans le flux multimédia que vous lisez, ou cela pourrait être une partie de ce format vidéo que votre lecteur Android ne comprend pas. Quoi qu'il en soit, certains lecteurs permettent d'ajuster le timing entre les flux audio et vidéo.

Un exemple est MX Player (MX Player - Apps sur Google Play). Je l'ai moi-même utilisé de temps en temps, et c'est un lecteur assez basique. Mais il offre plusieurs options de lecture qui ne sont pas nécessairement sur votre lecteur par défaut. Par exemple, vous pouvez ajuster la synchronisation audio/vidéo via les options de menu de ce lecteur, ce qui peut aider.


Une autre partie du problème peut être que sur tout appareil mobile, la lecture audio et vidéo est intrinsèquement séparée. C'est parce que les appareils mobiles ont tous des décodeurs matériels pour la lecture vidéo. Ce n'est pas que votre CPU ne pourrait pas le décoder nécessairement, mais le décodeur matériel utilisera beaucoup moins d'énergie. C'est en fait la même chose sur la plupart des systèmes : même Windows prend en charge le décodage matériel, même si cela se fait généralement sur le GPU plutôt que sur un moteur MPEG dédié.

Donc une partie de cette séparation peut signifier que votre logiciel ne suit pas complètement la latence de lecture entre l'audio et la vidéo, selon les spécificités de votre flux multimédia. J'ai déjà mentionné le tweak de synchronisation, qui vous permet d'avancer ou de retenir l'audio pour fixer la synchronisation avec la vidéo. Vous pouvez également essayer l'un des autres modes de lecture. La dernière fois que j'ai vérifié, MX Player prend en charge une lecture " logicielle ", et quelque chose appelé " matériel+ ".

Problème de synchronisation de la marche

Il y a un autre problème qui semble également découler de cette division matériel/logiciel dans Android (et non, ce n'est pas nécessairement unique à Android). Ce n'est pas nécessairement le cas que tous les lecteurs sont écrits pour prendre correctement en charge la lecture des médias dans leurs lecteurs par défaut, car dans le meilleur des cas, ils "fonctionnent simplement" sans aucun codage spécial.

Prenez donc votre ordinateur rapide. Vous envoyez la prochaine image vidéo et le prochain tampon audio à lire. Lorsque l'actuel est terminé, deux threads indépendants vont chacun chercher leur prochain élément à jouer ou à afficher. Mais on s'attend à ce que l'image vidéo suivante soit prête au moment où le prochain morceau audio doit être lu. Si ce n'est pas le cas, l'audio doit être lu ou vous entendez une erreur, mais la vidéo ne change pas tant que le décodage n'est pas terminé sur l'image actuelle. Le système ne peut s'empêcher de prendre du retard, même si ce n'est que rarement qu'un décodage de trame vidéo ne se produit pas dans le slot qui lui est alloué.

Cela illustre également le fait que, pour une lecture correcte, la vidéo doit être synchronisée avec l'audio. Nous sommes beaucoup plus sensibles à l'audio, même un accroc de 1ms est perceptible. Ainsi, dans un bon lecteur PC, qui ne cherche pas à être un lecteur parfait, mais simplement un bon lecteur, l'audio informe la vidéo. Si votre décodeur vidéo ne peut pas décoder une image dans le temps imparti, l'action correcte est d'afficher l'image en cours, de sauter la suivante, puis de commencer à décoder la suivante. Cela va sauter une trame pour maintenir la synchronisation A/V, et la plupart du temps, vous ne le remarquerez même pas.

Mais ce qui semblait se produire dans Android, au moins avec les lecteurs par défaut, c'est que les flux audio et vidéo s'exécutaient indépendamment les uns des autres, ce qui est supporté sachant justement comment fonctionne le décodage matériel. Dans un flux multimédia numérique correctement formaté, cela fonctionne tant que le système peut suivre le rythme de la vidéo. Si ce n'est pas le cas, ce que vous obtenez est un flux audio qui " marche progressivement en avant " du flux vidéo.

C'est donc ce qui semble être ce que vous rencontrez. Cela pourrait également être soigné en choisissant un mode de lecture différent dans un lecteur vidéo complémentaire comme MX Player. Je n'ai aucun intérêt spécifique à vous faire utiliser MX Player, je signale simplement que je sais qu'il dispose d'options qui pourraient résoudre votre problème.

Si la lecture logicielle résout effectivement le problème, sachez qu'elle va consommer plus d'énergie que la lecture matérielle. Elle va aussi probablement souffrir si vous essayez de lire une vidéo qui est juste trop "grosse" pour votre appareil. J'avais une tablette Android assez ancienne, avant même la sortie de Honeycomb, et je jouais avec le type de lecture vidéo qu'elle pouvait gérer, lorsque j'ai rencontré ces problèmes de synchronisation pour la première fois. À l'époque, même un flux 1080p à débit modéré était trop important pour le matériel de l'époque. Vous trouverez peut-être des limitations similaires sur les appareils Android bas de gamme qui essaient de lire des flux HEVC en 4K. Qui constituent également un défi pour de nombreux PC, sans prise en charge matérielle.