2017-09-05 6 views
0

Mon application doit basculer entre deux (ou plus) flux à l'entrée alors qu'il n'y a qu'une seule sortie (vous pourriez penser à un multiplexeur de flux). Les trames de l'entrée sont décodées puis réencodées à cause d'une superposition.Ajustement du PTS lors de la commutation entre les flux

Donc, pour organiser l'AVFrame PTS, je calcule un intervalle avant de coder les trames. Mais la chose est quand je commute entre un flux RTMP et un fichier MP4, la vidéo est retardée un peu chaque fois que je commute. Ainsi, au troisième commutateur, le flux résultant est désynchronisé.

Je ne sais pas s'il me manque quelque chose que je dois modifier sur le cadre avant l'encodage. Je pense aussi à la création d'un PTS indépendant pour les images en sortie mais je ne sais pas comment le créer.

Les flux d'entrée peuvent avoir des FPS, des bases de temps ou des codecs différents et l'application doit pouvoir traiter tous les flux.

Répondre

0

J'ai découvert la cause profonde.

Le problème était le fichier MP4. Avec ce type de fichier (pour une raison quelconque), les paquets vidéo et audio sont lus en paquets de bogues (20 paquets vidéo et 20 paquets audio) alors que sur un flux RTMP ressemble plus à 2 paquets vidéo et 2 paquets audio. Donc, le problème était que le commutateur était en cours d'application avant en lisant tout le paquet (c'est-à-dire 20 paquets vidéo et 10 paquets audio) donc après ce point le flux résultant est désynchronisé quoi que vous fassiez après cela.

La solution que j'ai implémentée attend jusqu'à ce qu'un type de trame décodée soit différent du précédent. Alors est quand j'effectue l'interrupteur.