2016-12-14 50 views
0

我試圖讓在GStreamer視頻可搜索可搜索的視頻,多次研究後,我發現,matroskamux和文件接收插件會做到這一點,但它不工作。如何使在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。在代碼中,如果您想中斷錄製,則需要自己發送事件,然後等待GstBus上收到EOS。

某些輸入,諸如文件有一個端部。在這些情況下,源元素通常會在完成閱讀時發送EOS本身。對於從理論上無限的數據流中讀取的數據源,例如相機,情況並非如此。

+0

謝謝!有效! – PierreOlivier