OpenCV и Gstreamer транслируют живое видео
Моя цель - получить видеопоток с карты захвата (Blackmagic decklink) в OpenCV и в прямом эфире на red5 или любой другой rtmp-сервер.
Итак, я попытался сделать две ветки на gstreamer с командой ниже работает правильно. Но при использовании с OpenCV просто направляйте черные кадры на сервер rtmp, кстати, opencv работает хорошо.
Команда Gstreamer:
gst-launch-1.0 -v autovideosrc! имя тройника = 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" max-latess = 100 t.! видео /x-raw, ширина =1280, высота =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 ответ
Проблема в том, что вы оставили там 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..