2015-11-03 29 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提供来自回调的缓冲区。