我的目标是从捕获卡(Blackmagic decklink)获得视频流到OpenCV和直播流到red5或任何其他rtmp服务器。
所以,我试着在gstreamer的两个分支上完成命令是在下面工作正常。但是,当与OpenCV一起使用时,只是流黑色帧到rtmp服务器,顺便说一下,OpenCV工作得很好。
Gstreamer命令:
gst-launch-1.0 -v autovideosrc !Tee name=t t !videoconvert !videoscale !队列!X264enc pass=pass1线程=4比特率=5000调= zerolatency !队列!Flvmux streamable=true !rtmpsinklocation="rtmp://127.0.0.1/live/stb live=1" max-lateness=100 t. !视频/x-raw、宽= 1280,高= 720 !appsink
OpenCV code:
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
我该怎么处理呢?
问题是你把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);
受到这个问题的启发…
请注意,在使用x264enc和tee时会出现问题。因为有时x264enc想要预卷很多帧这可能会淹没tee的其他分支。