LINUX.ORG.RU

Gstreamer. Навигация по активному .mkv файлу.

 , ,


0

2

Добрый день. Есть приблизительно такой pipeline по которому я получаю, предположим, поток от IP-камеры:

gst-launch-1.0 rtspsrc location=\"rtsp:..." ! application/x-rtp,encoding-name=H264,payload=96  ! rtph264depay ! h264parse !  matroskamux ! filesink location=\"D:test.mkv\"

Формируемый .mkv файл открывается через vlc и другие инструменты, однако навигация (перемотка) по файлу невозможна. Существует ли возможность (иные параметры pipeline-а, использование другого контейнера) создавать видео файл так, чтобы по нему работала навигация в тот момент, пока в него идет запись?



Последнее исправление: bronstein87 (всего исправлений: 1)

Чтобы работала перемотка, нужно корректно остановить pipeline. Я так понимаю, у тебя исходный поток «бесконечный», поэтому нужно это сделать каким-то специальным сигналом. Беглым гулежом нашёл, что можно послать SIGUSR2 вместо SIGINT, как если бы ты нажал CTRL+C. https://gstreamer.freedesktop.org/documentation/tools/gst-launch.html?gi-language=c (Pipeline Control)

Попробуй это сделать. Ещё попробуй для matroskamux принудительно установить streamable=false.

anatole
()

При записи живой видео-трансляции нет значения Duration, оно равно 00:00. Поэтому плеер и не будет перематывать. Однако, в практике такое возможно и нередко используется. Некоторые теле-вещатели как: BBC(Великобритания), NRK(Норвегия), Yleisradio(Финляндия), для просмотра живых трансляций телеканалов организуют на своих серверах так называемый TimeShift. У нас почему-то называют его Архивом. Это от безграмотности. TimeShift позволяет пользователю перематывать плеером назад по времени от точки 'живой' трансляции и обратно. Глубина TimeShift'а может быть разной. У ВВС она составляет 2 часа, у норвежцев 3 часа, у финнов 24 часа. Организовано это с целью дать возможность пользователю посмотреть телепередачу сначала, ежели он её начало проворонил.

xradio
()
Ответ на: комментарий от mrjaggers

Да.

Пункт 1.

mkv — хлам, мусор и ему место в помойке. Нет ни одной причины пользоваться mkv вместо mp4 кроме невыносимого эго тех, кто придумывал mkv.

Пункт 2.

mkv дизайнили настолько малоинформированные о реальных проблемах люди, что они не догадались стандартизовать индекс по файлу. Если в mp4 очень непросто собрать файл без индекса, то в mkv нормальная ситуация — прочитать весь файл, чтобы знать, как по нему перематывать.

Пункт 3.

Подобная задача решается стриминговыми серверами типа нашего флюссоника, причем в основном платными. Как альтернатива — вовза.

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

Тут же что нужно: базу данных держать. К этому добавляется очень приятная особенность: ни один распространенный формат/протокол передачи видео не адаптирован под видеонаблюдение. Максимум — таймшифт на 2-3 часа, не более того.

И да, mkv в помойку, тут нет никаких альтернативных мнений.

max_lapshin ★★★★★
()
Ответ на: комментарий от max_lapshin

Всем спасибо за ответы! После некоторых изысканий обнаружил, что мою проблему решает формат mpeg ts соответствующий элемент mpegtsmux gstreamer-а. Но у него, получается, ограниченный таймшифт?

bronstein87
() автор топика

А зачем gstreamer и зачем mkv? ffmpeg в mp4 не пробовал?

У меня gstreamer почему-то воспринимается исключительно как очередное глючное порождение гнома, нужное для какой-то мультимедийной мути то ли в браузерах то ли ещё где-то.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Изначально знакомство с gstreamer началось с плат на nvidia jetson, где encode/decode реализуется через элементы gstreamer. Полноценной поддержки ffmpeg до сих пор нет (сейчас вижу, что поддерживается только decode) и то с какими-то ограничениями. В текущий момент более актуальные китайские платы-аналоги jetson тоже реализуют этот функционал на gstreamer. Поэтому по привычке использую его при работе с ip камерами. Собственно сейчас попробовал gstreamer с mpeg ts, похоже делает то, что нужно.

bronstein87
() автор топика
Ответ на: комментарий от max_lapshin

Никогда не используйте mp4 для трансляций. Нет хвоста - нет файла. Не зря существует столько утилит (костылей) для восстановления поврежденных mp4 и работают они неидеально.
mkv тоже не лучший выбор, но лучше уж его. А вообще для трансляций есть ts (transport stream).

user4711
()
Ответ на: комментарий от user4711

у классического mp4 есть стриминговая модификация в виде fragmented mp4 или mfra, но у них ожидаемо проблемы с перемоткой.

Без сервера с базой данных эта задача не решается

max_lapshin ★★★★★
()