2012-10-06 217 views
2

我正在嘗試創建一個GStreamer管道(v 1.0)以便記錄和播放特殊文件格式。使用Gstreamer壓縮H264流

爲了記錄目的,我使用下面的管道:

gst-launch-1.0 videotestsrc ! video/x-raw-yuv, format=\(fourcc\)I420, width=640, height=480 ! videoconvert ! x264enc byte-stream=1 ! queue ! appsink 

appsink(使用new_sample()回調)我使用的壓縮方法來壓縮H264流,最後在輸出文件中存儲。

我用下面的管道,以播放錄製的文件:

gst-launch-1.0 appsrc ! video/x-h264 ! avdec_h264 ! autovideosink 

appsrc我解壓H264流,並將其發送給appsrc緩衝區(使用推緩存)。每個緩衝區的大小爲4095

不幸的GStreamer推後2個緩衝器打印以下調試消息:

錯誤:內部數據流誤差。

有什麼辦法解決這個問題嗎?

回答

3
  1. 您的解碼器之前添加legacyh264parse或h264parse(取決於您的GST組件的版本)。您需要能夠將全部幀發送到解碼器。

  2. 發佈avdec_h264很高興有一個ffmpegcolorspace能夠將視頻格式轉換爲您的顯示需求。

+0

* [您需要能夠將全幀發送到解碼器。] *我該怎麼做? –

+0

這就是「解析」元素的用途。 h264parse或legacyh264parse – av501

+0

正如我前面提到的,「每個緩衝區的大小是4095」。我的意思是,我從文件讀取了4095個字節,解壓後我通過Appsrc將其推送到管道。據我的理解你的答案,我應該分別推動每一幀(我是否認爲是正確的?)。現在,我如何計算每個幀的大小? –