2016-12-14 4 views
0

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

Это мой трубопровод:

gst-launch-1.0 videotestsrc ! x264enc ! h264parse ! matroskamux ! filesink location=test.mkv 

создать 5-секундный видео:

^Chandling interrupt. 
Interrupt: Stopping pipeline ... 
Execution ended after 0:00:05.989791758 
Setting pipeline to PAUSED ... 
Setting pipeline to READY ... 
Setting pipeline to NULL ... 
Freeing pipeline ... 

Когда я бегу открыть приложение из GStreamer:

[email protected]:~/Desktop$ gst-discoverer-1.0 test.mkv 
Analyzing file:///home/user/Desktop/test.mkv 
Done discovering file:///home/user/Desktop/test.mkv 

Topology: 
    container: Matroska 
    video: H.264 

Properties: 
    Duration: 0:00:00.566333333 
    Seekable: yes 
    Tags: 
     container format: Matroska 
     video codec: H264 
     minimum bitrate: 989280 
     bitrate: 1045608 
     maximum bitrate: 989280 

Продолжительность составляет 0 : 00: 00.566333333, это значение будет таким же, независимо от реальной продолжительности видео! И видео не доступно для поиска.

Что я делаю неправильно?

ответ

1

Вам необходимо отправить событие EOS (конец потока) в конвейер, чтобы элементы могли правильно закончить свой поток. Без этого мультиплексоры не смогут правильно закончить файл и записать индексы и заголовки, которые могут быть записаны только после того, как все будет обработано. Установка конвейера в NULL в качестве прерывания сделает все сразу, а мультиплексоры оставят файл незавершенным.

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

Некоторые входы, такие как файлы, имеют конец. В этих случаях исходный элемент обычно отправляет сам EOS, когда он заканчивает чтение. Это не относится к источникам, которые читаются из потока, который теоретически бесконечен, например камеры.

+0

Спасибо! Это сработало! – PierreOlivier

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