如何使用gstreamer创建中继服务器?

时间:2014-03-31 13:13:11

标签: java gstreamer

我知道如何接受来自网络摄像头的流并将其显示在摇摆组件中:

args = Gst.init("VideoTest", args);
    pipe = new Pipeline("VideoTest");
    final Element videosrc = ElementFactory.make("v4l2src", "source");
    final Element videofilter = ElementFactory.make("capsfilter", "filter");
    videofilter.setCaps(Caps.fromString("video/x-raw-yuv, width=640, height=480"
            + ", bpp=32, depth=32, framerate=30/1"));
    SwingUtilities.invokeLater(new Runnable() {

        public void run() {
            VideoComponent videoComponent = new VideoComponent();
            Element videosink = videoComponent.getElement();
            pipe.addMany(videosrc, videofilter, videosink);
            Element.linkMany(videosrc, videofilter, videosink);

            // Now create a JFrame to display the video output
            JFrame frame = new JFrame("Swing Video Test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(videoComponent, BorderLayout.CENTER);
            videoComponent.setPreferredSize(new Dimension(720, 576));
            frame.pack();
            frame.setVisible(true);

            // Start the pipeline processing
            pipe.setState(State.PLAYING);
        }
    });

我现在要做的是为每个客户端提供此流,该客户端将使用例如vlc媒体播放器或其他视频流阅读器连接到某个端口。这必须是通用的,也就是说我可能想要连接另一个gstreamer程序并使该程序成为中继服务器:它是第一个客户端,并使该流可用于其他客户端。

有办法做到这一点吗?我还是gstreamer的新手......

1 个答案:

答案 0 :(得分:1)

使用RTPbin实际上非常简单,但首先你需要对视频进行编码,因为发送原始YUV会占用大量带宽。

以下是使用h263编码和RTP bin的示例管道:

gst-launch-1.0 rtpbin name=rtpbin \
        v4l2src ! videoconvert ! ffenc_h263 ! rtph263ppay ! rtpbin.send_rtp_sink_0 \
                  rtpbin.send_rtp_src_0 ! udpsink port=5000                            \
                  rtpbin.send_rtcp_src_0 ! udpsink port=5001 sync=false async=false    \
                  udpsrc port=5005 ! rtpbin.recv_rtcp_sink_0                           \

此处提供更多信息(包括如何在另一端接收此数据): http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-rtpbin.html