Я написал фильтр push-уведомлений, который получает поток mpeg-ts, содержащий видео h.264 и аудио в формате aac. Я настроил конвейер directshow и настроил выходные контакты. Я могу рендерить поток h.264, но получаю артефакты при рендеринге, как видно из этого снимка экрана при потоковой передаче из gstreamer с использованием videotestsrc и шаблона «шар».На этом скриншоте должна быть только одна белая точка на черном фоне. Два дополнительных — это «остатки», которые появляются при воспроизведении анимации.
Если я передаю 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>
Вот как выглядит конвейер:
Конфигурация в этом примере: majortype = MEDIATYPE_Video, подтип = MEDIASUBTYPE_H264, formattype = FORMAT_MPEG2Video. Специально не указан заголовок последовательности и т. д.
Итак, вопрос в том, являются ли подобные артефакты симптомами какой-то общей проблемы с конфигурацией?