Почему я получаю эти артефакты при использовании демультиплексора MPEG-TS Microsoft и декодера H.264 в потоке MPEG-TS H.264?

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

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

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

Кроме того, ошибки появляются в верхней половине изображения, когда интервал I-Frame равен 60, то есть каждые 2 секунды. Когда мы переходим на один I-кадр каждую секунду (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. Специально не указан заголовок последовательности и т. д.

Итак, вопрос в том, являются ли подобные артефакты симптомами какой-то общей проблемы с конфигурацией?


person icecream    schedule 03.05.2013    source источник


Ответы (2)


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

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

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

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

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

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

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

person av501    schedule 08.05.2013

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

person icecream    schedule 10.05.2013