2013-05-03 3 views
1

Я написал живой фильтр, который получает поток mpeg-ts, содержащий h.264 видео и аудио aac. Я настроил конвейер directshow и сконфигурировал выходные выводы. Я могу отобразить поток h.264, но я получаю артефакты в рендеринге, как видно из этого скриншота при потоковой передаче с gstreamer с помощью видеоролика и шаблона «ball». the "ball" pattern Этот снимок экрана должен содержать только одну белую точку на черном фоне. Двумя дополнительными являются «остатки», которые появляются при воспроизведении анимации.Почему я получаю эти артефакты при использовании демультиплексора Microsoft MPEG-TS и декодера H.264 в потоке MPEG-TS H.264?

Если я передаю MPEG-2 и соответствующим образом изменяю конвейер, шаблон отображает без ошибок. Я попытался использовать настройки, описанные on msdn, для настройки вывода, как с использованием H264, так и с AVC1, явно предоставляющих заголовок последовательности и так далее. Я все равно получаю такие же артефакты.

Интересно, что артефакты в основном появляются на той же частоте, что и I-Frames, и если мы отправляем только I-Frames (key-int-max = 1), артефакты полностью исчезают.

Кроме того, ошибки отображаются в верхней половине изображения, когда интервал I-Frame равен 60, то есть каждые 2 секунды. Когда мы переходим на один I-Frame каждый второй кадр (key-int-max = 2), артефакты появляются только в узкой полосе в верхней части изображения.

Следующая GStreamer трубопровода производится видеопоток:

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> 

Это то, что трубопровод выглядит следующим образом: Pipeline

Конфигурация в этом примере majortype = MEDIATYPE_Video, подтип = MEDIASUBTYPE_H264, formattype = FORMAT_MPEG2Video. Отсутствует конкретный указатель последовательности и т. Д.

Вопрос в том, являются ли эти признаки артефактов некоторой общей проблемой конфигурации?

ответ

0

Оказывается, демультиплексор MPEG-2 не предназначен для обработки содержимого H.264. Вот почему эти эффекты появляются.

1

Вы теряете данные в своей передаче, что может привести к ошибкам. Проблема в том, что у меня фотографии имеют более высокий битрейт, чем картинки P. Если у вас есть cbr n/w, вы можете увидеть эту проблему.

Почему артефакты выглядеть так:

Теперь, если у вас есть видео только с 1 белым шаром и остальной фон черный, когда вы теряете кадры опорных кадров теряются, и это будет выглядеть искаженные, поскольку декодер может просто попытаться использовать кадры из последнего действительного фрейма для отображения. Поскольку ваш последний действительный фрейм - все черные остатки экрана выглядят нормально, часть, в которой все время показывается с ошибками.

Замените этот шаблон другим, и вы увидите более четко то, что я имею в виду.

С фотографиями I только никаких вопросов о каких-либо справочных фотографиях и, следовательно, вы получите чистый результат.

Один из способов проверки совместимости передачи - это выгрузить ваш вывод в файл и прочитать его с другой стороны с файлом. Если это прекрасно работает, вы знаете, что ваша передача потеряла данные.

Также, поскольку у вас есть часы внизу, вы должны увидеть часы, также прыгающие, если есть потеря в кадрах.

Смежные вопросы