2013-05-03 6 views
1

J'ai écrit un filtre push en direct qui obtient un flux mpeg-ts contenant de la vidéo h.264 et de l'audio aac. J'ai mis en place un pipeline DirectShow et configurer les broches de sortie. Je peux rendre le flux h.264 mais je reçois des artefacts dans le rendu comme on peut le voir sur cette capture d'écran lors de la diffusion depuis gstreamer en utilisant un videotestsrc et le motif "ball". the "ball" pattern Cette capture d'écran ne doit contenir qu'un seul point blanc sur fond noir. Les deux supplémentaires sont des "restes" qui apparaissent lors de la lecture de l'animation.Pourquoi ai-je ces artefacts lors de l'utilisation du démultiplexeur Microsoft MPEG-TS et du décodeur H.264 sur un flux MPEG-TS H.264?

Si je diffuse le flux MPEG-2 et change le pipeline en conséquence, le motif s'affiche sans erreur. J'ai essayé d'utiliser les paramètres décrits on msdn pour configurer la broche, à la fois en utilisant H264 et AVC1 fournissant explicitement l'en-tête de séquence et ainsi de suite. Je reçois toujours le même genre d'artefacts. Une chose intéressante est que les artefacts apparaissent principalement à la même fréquence que les I-Frames arrivent, et si nous envoyons seulement des I-Frames (key-int-max = 1), les artefacts disparaissent complètement. De même, les erreurs semblent apparaître dans la moitié supérieure de l'image lorsque l'intervalle I-Frame est de 60, c'est-à-dire toutes les 2 secondes. Lorsque nous passons à une image I chaque seconde image (key-int-max = 2), les artefacts apparaissent uniquement dans une bande étroite en haut de l'image.

Le pipeline GStreamer suivant produit le flux vidéo:

videotestsrc live-source=true pattern=ball ! video/x-raw-yuv,format=(fourcc)I420,width=1366,height=768,framerate=30/1 ! timeoverlay halign=left valign=bottom shaded-background=true ! x264enc bitrate=4096 tune=zerolatency ! h264parse ! queue ! mux. audiotestsrc wave=ticks volume=0.2 ! voaacenc ! mux. mpegtsmux name=mux ! udpsink host=<ip> port=<port> 

C'est ce que le pipeline ressemble: Pipeline

La configuration dans cet exemple est majortype = MEDIATYPE_Video, sous-type = MEDIASUBTYPE_H264, FormatType = FORMAT_MPEG2Vidéo. Aucun entête de séquence spécifiquement fourni, etc.

Donc la question est, sont ces sortes d'artefacts symptômes d'un problème de configuration commun?

Répondre

0

Il s'avère que le démultiplexeur MPEG-2 n'est pas conçu pour gérer le contenu H.264. C'est pourquoi ces effets apparaissent.

1

Vous perdez des données dans votre transmission, ce qui peut entraîner des erreurs. Le problème est que les images ont un débit plus élevé que les images P. Si vous avez un cbr n/w alors vous pouvez potentiellement voir ce problème.

Pourquoi les artefacts apparaissent de cette façon:

Maintenant, si vous avez eu une vidéo avec seulement 1 boule blanche et le reste du fond est noir, lorsque vous images en vrac les images de référence sont perdus et il apparaîtra brouillée parce qu'un décodeur peut simplement essayer d'utiliser des cadres de la dernière image valide à afficher. Puisque votre dernier cadre valide est tout le reste noir de l'écran semble correct, la partie où la balle while est encore apparaît avec des erreurs.

Remplacez ce modèle par un autre et vous verrez plus clairement ce que je veux dire.

Avec des images I seulement, il n'y a pas de photos de référence et donc vous obtiendrez une sortie propre. Une façon de vérifier si la transmission est correcte est de vider votre sortie dans un fichier et de la lire de l'autre côté avec un fichier. Si cela fonctionne bien, vous savez que votre transmission perd des données.

En outre puisque vous avez l'horloge en bas, vous devriez voir l'horloge sauter aussi s'il y a perte de trames.