Perché il mio video rimane indietro rispetto all’audio quando lo riproduco nel mio telefono Android?

È il modo in cui Android riproduce il video. Probabilmente significa che il tuo dispositivo Android è sottopotenziato per quel tipo di video. Non ho analizzato Android su questo di recente, poiché i miei dispositivi sono stati abbastanza veloci da non essere un problema.

Problema di sincronizzazione statica

Se stai vedendo un ritardo tra audio e video che è fisso, potrebbe essere un difetto nel flusso multimediale che stai riproducendo, o potrebbe essere qualche parte di quel formato video che il tuo lettore Android non capisce. In entrambi i casi, alcuni lettori permettono di regolare i tempi tra i flussi audio e video.

Un esempio è MX Player (MX Player - Apps on Google Play). L'ho usato io stesso di tanto in tanto, ed è un lettore piuttosto basilare. Ma offre diverse opzioni per la riproduzione che non sono necessariamente sul vostro lettore predefinito. Per esempio, è possibile regolare la sincronizzazione audio/video tramite le opzioni di menu in questo lettore, il che può aiutare.

Un'altra parte del problema potrebbe essere che su qualsiasi dispositivo mobile, la riproduzione audio e video sono intrinsecamente separate. Questo perché i dispositivi mobili hanno tutti decoder hardware per la riproduzione video. Non è che la vostra CPU non possa decodificarlo necessariamente, ma il decoder hardware userà molta meno energia. Lo stesso vale per la maggior parte dei sistemi: anche Windows supporta la decodifica hardware, anche se di solito è fatta sulla GPU piuttosto che su un motore MPEG dedicato.

Quindi parte di questa separazione può significare che il vostro software non sta seguendo completamente la latenza di riproduzione tra audio e video, a seconda delle specifiche del vostro flusso multimediale. Ho già menzionato il tweak di sincronizzazione, che permette di avanzare o trattenere l'audio per correggere la sincronizzazione con il video. Potresti anche provare una delle altre modalità di riproduzione. L'ultima volta che ho controllato, MX Player supporta una riproduzione "Software", e qualcosa chiamato "Hardware+".

Problema della sincronizzazione a piedi

C'è un altro problema che sembra derivare anche da questa divisione hardware/software in Android (e no, non è necessariamente unico per Android). Non è detto che tutti i lettori siano scritti per supportare correttamente la riproduzione dei media nei loro lettori predefiniti, perché nel migliore dei casi, "funzionano e basta" senza alcuna codifica speciale.

Prendete quindi il vostro computer veloce. Inviate il prossimo frame video e il prossimo buffer audio da riprodurre. Quando quello corrente è finito, due thread indipendenti recuperano ciascuno il loro prossimo elemento da riprodurre o visualizzare. Ma questo si aspetta che il prossimo fotogramma video sia pronto quando è il momento di riprodurre il prossimo pezzo audio. Se questo non accade, l'audio deve essere riprodotto o si sente un glitch, ma il video non cambierà fino a quando la decodifica è completa su quel frame corrente. Il sistema non può fare a meno di rimanere indietro, anche se solo raramente la decodifica di un frame video non avviene nello slot assegnatogli.

Questo illustra anche che, per una corretta riproduzione, il video deve essere sincronizzato con l'audio. Siamo molto più sensibili all'audio, anche un glitch di 1ms è percettibile. Quindi in un lettore per PC adeguato, che non cerca di essere un lettore perfetto, semplicemente un buon lettore, l'audio informa il video. Se il tuo decodificatore video non può decodificare un fotogramma entro lo slot di tempo assegnato, l'azione corretta è quella di visualizzare quello corrente, saltare il successivo, e poi iniziare a decodificare quello successivo. Questo salterà un fotogramma per mantenere la sincronizzazione A/V, e la maggior parte delle volte non si noterà nemmeno.

Ma quello che sembrava accadere in Android, almeno con i lettori predefiniti, è che i flussi audio e video venivano eseguiti indipendentemente l'uno dall'altro, il che è supportato sapendo solo come funziona la decodifica hardware. In un flusso multimediale digitale formattato correttamente, questo funziona finché il sistema può stare al passo con il video. Altrimenti, quello che si ottiene è un flusso audio che sta gradualmente "camminando avanti" rispetto al flusso video.

Quindi sembra essere quello che stai sperimentando. Questo potrebbe anche essere curato scegliendo una diversa modalità di riproduzione in un lettore video aggiuntivo come MX Player. Non ho alcun interesse specifico nel farti usare MX Player, sto semplicemente riferendo che so che ha delle opzioni che potrebbero risolvere il tuo problema.

Se la riproduzione software risolve il problema, sii consapevole che userà più energia della riproduzione hardware. Probabilmente soffrirà anche se stai cercando di riprodurre video che sono semplicemente troppo "grandi" per il tuo dispositivo. Avevo un tablet Android piuttosto vecchio, anche prima che uscisse Honeycomb, e stavo giocando con il tipo di riproduzione video che poteva gestire, quando mi sono imbattuto per la prima volta in questi problemi di sincronizzazione. A quel tempo, anche un moderato flusso di bitrate 1080p era troppo per l'hardware di quell'epoca. Potreste trovare limitazioni simili su dispositivi Android di fascia bassa che cercano di riprodurre flussi HEVC in 4K. Che sono anche una sfida per molti PC, senza supporto hardware.