av_interleaved_write_frame

Scènes

L'audio et la vidéo proviennent de sources externes (microphone et caméra) et sont capturées sous forme de données brutes (même vidéo) sans aucune compression. J'utilise h264 pour encoder la vidéo sans compresser l'audio (PCM). L'audio capturé est : 16 bits, 44 100 khz, stéréo. La vidéo capturée est de 25FPS.

question

Comment écrire alternativement audio et vidéo ?

Solution

La meilleure chose à faire est d'utiliser les horodatages donnés lorsque l'audio/vidéo a été capturé en pts et dts par ces applications . Ce ne sont donc pas exactement des horodatages en temps réel (à partir de l'horloge), mais des horodatages de la capture multimédia.

av_interleaved_write_frameÉcrivez les paquets de sortie de manière à ce qu'ils s'entrelacent correctement (peut-être les mettre en file d'attente en interne). « Correctement inséré » dépend du format du conteneur, mais cela signifie généralement une augmentation monotone des marqueurs DTS pour les paquets dans le fichier de sortie.

Comme la plupart des API FFmpeg, il ne doit pas être appelé simultanément par deux threads avec le même AVFormatContext av_interleaved_write_frame. Je suppose que vous utilisez un mutex pour vous en assurer. Si vous le faites, peu importe qu'il s'agisse d'une application multithread ou non maintenant.

De la même manière que dans une application monothread. Dts sont généralement générés par le codec de pts. Les points proviennent généralement des périphériques de capture/décodeurs et des données audio/vidéo correspondantes.

Des horodatages en direct sont disponibles, mais cela dépend vraiment de comment et quand vous les obtenez.

Supongo que te gusta

Origin blog.csdn.net/fuhanghang/article/details/125294373
Recomendado
Clasificación