2016-11-16 1 views
1

J'essaie de résoudre un problème de synchronisation A/V. La vidéo aura 1 seconde de retard par rapport à l'audio. (Voir ma note ci-dessous s'il vous plaît)Android Enregistrement et le résultat a un problème de synchronisation audio vidéo

De Android partie Media Framework, ce que je pourrais retarder simplement l'horodatage audio pour laisser synchroniser avec la vidéo, où dois-je commencer? Est-ce AudioSource? MPEG4Writer? MediaCodecSource?

S'il vous plaît aider !!

[Le cas est]: s'il y a une vidéo de 5 secondes. La situation actuelle:

La partie vidéo de 0-1 sec gèle, 1-5 sec reste normal. La trame vidéo commence à partir de 1.00s est en fait l'image de la 0.00s.

La partie audio reste normale dans toute la scène. Donc, la partie vidéo sera retardée de 1 seconde avec la partie audio.

La partie vidéo sur 1.00s correspond réellement à la partie audio sur 0.00s.

[Échec Essayez]

J'essaie si je déménage juste la StartTimeUs sur la partie vidéo sur MPEG4Writer, A/V se synchronise, mais à la fin dans le dossier, il y aura 1,00s avec le gel de la vidéo, et audio normal.

[MyThought]

Si je peux faire une pause Audio 1 sec, qui se déplace 0.00s audio à 1,00s, il va synchroniser. Mais je ne connais pas le code que je peux changer pour cette méthode. S'il vous plaît aider!

My Notes

+0

Vous devez enregistrer la voix et la vidéo séparément. Pour l'enregistrement audio, vous devez utiliser OpenGLEs. Pour l'enregistrement vidéo sans voix, vous pouvez utiliser la classe Camera et Surfaceview. puis mélangez deux d'entre eux. –

Répondre

0

Je commence avec l'hypothèse que vous utilisez un codeur MediaCodec et alimenter la sortie dans un MediaMuxer pour produire un fichier vidéo.

Il semble que cela puisse être lié à un problème similaire auquel j'ai été confronté dans this question. Je crois qu'un encodeur audio MediaCodec ignorera essentiellement les horodatages que vous lui lancerez; donc je ne pense pas que changer les horodatages audio résoudra votre problème. Cependant, il semble que vous puissiez résoudre le problème en corrigeant les horodatages des images vidéo pour qu'elles soient à un moment antérieur (comme synchronisé avec l'audio) après que le cadre quitte l'encodeur mais avant qu'il n'atteigne le multiplexeur.

+0

J'ai mis à jour la question. La situation est vidéo sera toujours 1 sec retard avec l'audio. J'ai essayé de changer le Video StartTimeUs à 1sec sur MPEG4Writer. Il se synchronisera jusqu'à la dernière seconde du fichier. J'ai gelé la vidéo, mais l'audio normal ... Aide ~ – user2871337

+0

Pourriez-vous partager le code "Correction de l'horodatage des images vidéo à être plus tôt" Supposons que la vidéo est retard de 1 seconde que l'audio. – user2871337

+0

Dans mon cas, les trames vidéo ont été dessinées sur une surface qui a servi d'entrée pour l'encodeur vidéo MediaCodec. Donc, mon code utilisait des paires de Surface.lockCanvas() (ou lockHardwareCanvas() sur les nouveaux périphériques) et Surface.unlockCanvasAndPost(). Comme la méthode de déverrouillage ne permet pas de passer un horodatage, je place manuellement un horodatage dans le BufferInfo pour chaque appel à MediaMuxer.writeSampleData(). – nyttimangus