2015-11-03 66 views
2

我想要做的是發送由h264編碼爲gstreamer的實時相機流。我已經看到很多使用rtp和mpeg-ts通過網絡發送的例子。但問題是,所有這些例子都假設輸入將由固定文件或實時流提供服務,該文件或流已經在傳輸協議中進行了代碼轉換,如下所示。如何處理通過網絡發送的活的原始h264流

client: gst-launch-1.0 videotestsrc horizo​​ntal-speed = 5! x264enc tune =「zerolatency」threads = 1! mpegtsmux! tcpserversink host = 192.168.0.211 port = 8554

server:gst-launch-1.0 tcpclientsrc port = 8554 host = 192.168.0.211! tsdemux! h264parse! avdec_h264! xvimagesink

但是,我的相機提供了下面的界面(用java編寫的,實際上適用於adnroid)。該界面只提供原始的h264塊。

mReceivedVideoDataCallBack=newDJIReceivedVideoDataCallBack(){ 
    @Override 
    public void onResult(byte[] videoBuffer, int size) 
    { 
} 

我可以創建tcp會話來發送那些數據塊。但是,我怎樣才能使那些未包含在傳輸協議中的數據轉換爲gstreamer tcpclient不可信的格式呢? 在攝像機端以ts格式轉碼原始流可能是一個解決方案。但我不知道從非文件和非傳輸格式的數據進行轉碼。我已經搜索了gstreamer和ffmpeg,但是現在我無法使用受支持的接口派生出一種處理h264塊流的方法。 或者,有什麼辦法讓gstreamer直接接受那些簡單的原始h264塊?

回答

0

我認爲最好的解決方案是爲您的視頻源創建自己的元素,然後使用元素和mpegtsmux構建管道。

但是,您可以使用appsrc + mpegtsmux並通過JNI爲您的appsrc提供來自回調的緩衝區。