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

客户:
gst-launch-1.0 videotestsrc horizo​​ntal-speed = 5! x264enc tune =“ zerolatency”线程= 1! mpegtsmux! tcpserversink主机= 192.168.0.211端口= 8554

服务器:gst-launch-1.0 tcpclientsrc端口= 8554主机= 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块?

最佳答案

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

但是,您可以使用appsrc + mpegtsmux并通过JNI将您的appsrc与来自回调的缓冲区一起提供。

07-27 15:24