Gstreamer: поток RTP для записи VP8 / webm не создает файл с возможностью поиска

Я использую Gstreamer для захвата потока WebRTC в файл webm. Я заметил, что при использовании кодировки VP8 в потоке rtp созданный файл не доступен для поиска ни в каких проигрывателях (например, Chrome или VLC). Под возможностью поиска я подразумеваю, что вы не можете воспроизводить файл из произвольной точки в потоке, он запускается только с самого начала при воспроизведении.

Вместо этого я использовал кодировку h264 с rtp, и полученный файл mp4 доступен для поиска. Кроме того, при удалении кодирования / декодирования rtp создается выходной файл с возможностью поиска для VP8.

Вот тестовые конвейеры для получения этих результатов.

# produces a valid webm file that is not seekable (I need this to be seekable)
gst-launch-1.0 -e \
  autovideosrc ! autovideoconvert ! vp8enc ! rtpvp8pay ! rtpvp8depay ! webmmux ! \
  filesink location=test.webm

# produces a valid webm file that is seekable
gst-launch-1.0 -e \
  autovideosrc ! autovideoconvert ! vp8enc ! webmmux ! \
  filesink location=test.webm

# produces a valid mp4 file that is seekable
gst-launch-1.0 -e \
  autovideosrc ! autovideoconvert ! x264enc ! rtph264pay ! rtph264depay ! h264parse ! mp4mux ! \
  filesink location=test.mp4


Есть ли способ создания записи rtp / VP8 / matroska с возможностью поиска? Это ошибка в Gstreamer?

Я использовал Gstreamer 1.14 и 1.18 на Ubuntu с одинаковыми результатами.


person ricosrealm    schedule 28.02.2021    source источник
comment
Проблема здесь не в отсутствии информации о продолжительности, а в отсутствии постоянной частоты кадров. Я считаю, что протокол rtp удаляет информацию о частоте кадров, и мультиплексор больше не может ее кодировать для создания файла, доступного для поиска.   -  person ricosrealm    schedule 08.03.2021


Ответы (1)


Это странность формата webm, которая также влияет на API MediaRecorder. См. здесь.

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

person Philipp Hancke    schedule 01.03.2021
comment
Сгенерированные файлы имеют продолжительность, закодированную matroskamux на EOS (поэтому я использую -e). Вы можете запустить приведенные выше команды и проверить с помощью ffprobe, что продолжительность установлена ​​при использовании -e, а не иначе. Это также не объясняет, почему комбинация rtpvp8pay / depay вызывает это, тогда как при ее отсутствии создается файл с возможностью поиска. - person ricosrealm; 01.03.2021