2015-11-25 3 views
1

Я видел странное поведение при поиске во время воспроизведения видео, я создал видео с помощью DirectShow - проблема в Windows 7 Only (W8/W10 отлично работает).Установка интервала ключевого кадра в кодере DirectShow

График построен так:

Source(Webcam) -> H264 Encoder -> MP4 Mux -> File Writer 

Так я использую H264 кодировщик, однако по некоторым причинам кодер удаляет все ключевые кадры (SYNC) после фильтра датчика. Используя еще один старый H264 Encoder, я вижу, что он отлично устанавливает кадр (синхронизацию) каждые 20 кадров, а выходной файл этого кодера работает безупречно во всех операционных системах.

Поэтому я подозреваю, что проблема заключается в том, что кодировщик не правильно задает ключевые кадры, и поэтому не сможет корректно искать (однако Windows 8 и 10 могут понять, как правильно искать файл без ключевых кадров, а не Windows 7)

Использование VLC/WMP на Windows 7 при поиске в файле файл будет действовать странно (нет видео в течение долгого времени, серый некачественно видео более 10 секунд, вдруг остановка видео ..)

Так мой вопрос в том, как установить интервал ключевого кадра в фильтре кодирования в DirectShow?

Редактировать: Еще одна интересная вещь, которую я обнаружил, заключается в том, что когда я ищу, этот странный вывод отображается через фильтр анализатора (вставленный сразу после декодера) во время воспроизведения. enter image description here

+0

Николас, из любопытства, какой H264 кодер вы используете? –

+0

@MikeDinescu Я использую VisioForge H264 – Nicholas

+0

Поскольку VisioForge, похоже, является коммерческим продуктом, я думаю, что лучше всего обратиться к разработчикам и запросить документацию - и в случае, если функция недоступна (или не реализована правильно), что они добавляют/фиксируют это. –

ответ

2

Решение о включении ключевого кадра является кодировщиком. Он может иметь настройку, определяющую длину GOP и минимальную частоту ключевых кадров. Он может дополнительно вставить ключевой кадр при смене сцены. Он может дополнительно принимать внешние запросы для вставки в определенную точку.

Общий подход IAMVideoCompression::put_KeyFrameRate. В то же время я бы сказал, что это кодировщик. Вы должны проверить документацию для конкретного кодировщика, который вы используете, чтобы узнать, как это сделать.

+0

Спасибо, Роман. Это прекрасный ответ на вопрос, к сожалению, в моем случае IAMVideoCompression не поддерживается. Поэтому мне нужно надеяться, что мой кодер имеет какой-то способ сделать это. – Nicholas

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