OpenCV和Gstreamer流媒体直播视频

时间:2016-06-29 17:00:16

标签: java opencv gstreamer live-streaming java-gstreamer

我的目标是从捕获卡(Blackmagic decklink)获取视频流到OpenCV,并直播到red5或任何其他rtmp服务器。

所以,我尝试在gstreamer处完成两个分支,命令在下面是正常工作。但是,当与OpenCV一起使用时,只需将黑色帧流式传输到rtmp服务器,顺便说一下opencv运行良好。

Gstreamer命令:

  

gst-launch-1.0 -v autovideosrc! tee name = t t。 !视频转换!   视频!排队! x264enc pass = pass1 threads = 4 bitrate = 5000   tune = zerolatency!排队! flvmux streamable = true! rtmpsink   location =" rtmp://127.0.0.1/live/stb live = 1"最大迟到= 100吨。 !   video / x-raw,width = 1280,height = 720! appsink

OpenCV代码:

String gstSentence = "gst-launch-1.0 -v autovideosrc ! tee name=t " +
                "t. ! videoconvert ! videoscale ! queue ! x264enc pass=pass1 threads=4 bitrate=5000 tune=zerolatency  " +
                "! queue ! flvmux streamable=true ! rtmpsink location=\"rtmp://127.0.0.1/live/stb live=1\" max-lateness=100 " +
                "t. ! video/x-raw,width=1280,height=720 ! appsink";

        System.out.println(gstSentence);
        videoCapture = new VideoCapture(gstSentence);

我的环境:

  • Ubuntu 16.04
  • OpenCV 3.1 - Java Wrapper
  • Gstreamer 1.8.1

我该如何处理?

提前致谢。

1 个答案:

答案 0 :(得分:1)

问题是你在那里留下了gst-launch-1.0,当然无法正常工作。

这是一种正确的方式:

String gst = "autovideosrc ! tee name=t " + 
             "t. ! videoconvert ! videoscale ! queue ! x264enc pass=pass1 threads=4 bitrate=5000 tune=zerolatency  " +
             "! queue ! flvmux streamable=true ! rtmpsink location=\"rtmp://127.0.0.1/live/stb live=1\" max-lateness=100 " +
             "t. ! video/x-raw,width=1280,height=720 ! appsink";

videoCapture = new VideoCapture(gstSentence);

灵感来自this问题..

请注意,使用x264enc和tee时会出现问题..因为有时x264enc会预先输入很多可能会溢出T恤其他分支的帧...