Как создать проиндексированный видеофайл с помощью Gstreamer

Я пытаюсь использовать Gstreamer для создания доступного для поиска (индексированного) видеофайла в Linux. Мои конвейеры работают для записи и сохранения данных, но я не могу понять, как индексировать данные, чтобы я мог выполнять поиск с помощью gst_element_seek_simple() [http://docs.gstreamer.com/display/GstSDK/Basic+tutorial+4%3A+Time+management]

Я видел этот пост: отслеживание и поиск позиции вывода видео Gstreamer и подтверждено, что я отправляю EOS по конвейеру с -e.

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

# gst-launch-0.10 -e v4l2src ! \
    tee name=t ! 
    queue ! 
    video/x-raw-yuv,width=320,height=240 ! 
    videoflip method=clockwise ! 
    ffmpegcolorspace ! 
    fbdevsink t. ! 
    queue ! 
    ffmpegcolorspace ! 
    ffenc_mpeg4 ! 
    filesink location=output.m4v

Вот результат:

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
WARNING: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Could not get parameters on device '/dev/video0'
Additional debug info:
v4l2src_calls.c(235): gst_v4l2src_set_capture (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
system error: Inappropriate ioctl for device
Setting pipeline to PLAYING ...
New clock: GstSystemClock
^CCaught interrupt -- handling interrupt.
Interrupt: Stopping pipeline ...

(gst-launch-0.10:534): GLib-CRITICAL **: Source ID 62 was not found when attempting to remove it
EOS on shutdown enabled -- Forcing EOS on the pipeline
Waiting for EOS...
Got EOS from element "pipeline0".
EOS received - stopping pipeline...
Execution ended after 10057977251 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

А вот вывод gst-discover для моего нового файла:

beaglebone:# gst-discoverer-0.10 output.m4v 
Analyzing file:///output.m4v
Done discovering file:///output.m4v

Topology:
  video: MPEG-4 Video

Properties:
  Duration: 0:00:00.000000000
  Seekable: no

Спасибо


person linsek    schedule 12.01.2015    source источник


Ответы (1)


Вам нужно сохранить результат в доступном для поиска/индексированном формате. Для этого вы можете поместить видео mpeg4 в контейнер, такой как mp4 или matroska. Используйте «! mp4mux ! filesink» или «! matroskamux ! filesink», чтобы иметь его в тех форматах, которые должны сделать его доступным для поиска.

Дополнительные примечания: gstreamer 0.10 устарел более чем на 2 года и не поддерживается, обновите его до 1.0. http://gstreamer.freedesktop.org/ — это официальный веб-сайт gstreamer, на котором вы найдете выпуски для 1. х версии есть. Веб-сайт gstreamer.com — это проект, не связанный с официальным проектом, и если вы прочитаете текст на сайте gstreamer.com, то увидите, что вам следует использовать официальный репозиторий и установщики.

person thiagoss    schedule 13.01.2015
comment
Именно в этом была проблема. Добавление плагина mp4mux до того, как Filesink сгенерировал индексированный видеофайл. К сожалению, ограничения моего проекта не позволяют использовать последнюю версию gstreamer-1.0, но все необходимые мне возможности есть в версии 0.10. Спасибо за вашу помощь! - person linsek; 13.01.2015