Gstreamer: быстрая перемотка видеофайла назад

Я пытаюсь перемотать видеофайл с параметром скорости "-1". Он перематывается на небольшую продолжительность, а затем воспроизведение останавливается. В итоге игрока убивают. Однако ускоренная перемотка того же видеофайла работает нормально. Я тестировал его со скоростью «2x» и «4x». Если я просто ищу назад с определенной продолжительностью (скорость «1.0»), она переходит к этой метке времени и начинает воспроизведение, как и ожидалось.

Насколько я понимаю, событие Seek обрабатывается в элементе Demuxer конвейера, где:

  1. Он очищает текущие данные потока в очереди
  2. Создает новый сегмент с обновленными значениями из события поиска.
  3. Как только новый сегмент будет готов с новыми потоковыми данными, начнется воспроизведение. С этого момента воспроизведение будет запущено на основе новых параметров, установленных в новом сегменте.

Что касается обратного воспроизведения, я не могу понять, где на самом деле блокируется конвейер. Я вижу, что элемент демультиплексора извлекает данные и помещает их в новый сегмент. Кто-нибудь может подсказать или указать, где может быть проблема?


person Vikram Desai    schedule 22.12.2011    source источник


Ответы (1)


Обратное воспроизведение здесь может быть неправильно реализовано. Пожалуйста, сообщите об ошибке, предоставьте как можно больше подробностей о формате (например, с помощью gst-discoverer) и, если возможно, ссылку на файл.

person ensonic    schedule 07.01.2012
comment
Я попробовал это в формате MKV. В некоторых случаях перемотка работает в зависимости от флага поиска, который я буду использовать при отправке события поиска. Например: если я использую GstSeekFlags::GST_SEEK_FLAG_KEY_UNIT или GST_SEEK_FLAG_NONE, перемотка работает (без видимого обновления ключевого кадра на дисплее. Однако продолжительность воспроизведения обновляется с обратными значениями, и когда воспроизведение возобновляется, воспроизведение начинается с фактической позиции после перемотки.) Перемотка не работает если я использую GstSeekFlags::GST_SEEK_FLAG_FLUSH Не могли бы вы предложить мне, где мне нужно искать, чтобы, по крайней мере, я мог отображать ключевые кадры во время перемотки? - person Vikram Desai; 12.01.2012
comment
Для очистки (или любого случая, когда вы отправляете много событий поиска) _KEY_UNIT - хорошая идея, так как не будет тратить время на декодирование и отбрасывание кадров, чтобы добраться до точных позиций. Промывка будет простым сливом ненужного трубопровода при изменении скорости. - person ensonic; 26.02.2012