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個緩衝器打印以下調試消息:
錯誤:內部數據流誤差。
有什麼辦法解決這個問題嗎?
* [您需要能夠將全幀發送到解碼器。] *我該怎麼做? –
這就是「解析」元素的用途。 h264parse或legacyh264parse – av501
正如我前面提到的,「每個緩衝區的大小是4095」。我的意思是,我從文件讀取了4095個字節,解壓後我通過Appsrc將其推送到管道。據我的理解你的答案,我應該分別推動每一幀(我是否認爲是正確的?)。現在,我如何計算每個幀的大小? –