如何处理活的原始h264流通过网络发送

时间:2015-11-03 06:26:56

标签: ffmpeg video-streaming gstreamer

我想要做的是将由h264编码的实时摄像机流发送到gstreamer。我已经看过许多使用rtp和mpeg-ts通过网络发送的示例。但问题在于,所有这些示例都假设输入将由固定文件或实时流提供,该流已经在传输协议中进行转码,如下所示。

客户: 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,但是我无法使用支持的接口unitl来处理h264块流。 或者,有没有办法让gstreamer直接接受那些简单的原始h264块?

1 个答案:

答案 0 :(得分:0)

我认为最好的解决方案是为您的视频源创建自己的元素,然后使用您的元素和mpegtsmux构建管道。

但是,您可以使用appsrc + mpegtsmux并通过JNI向您的appsrc提供回调中的缓冲区。