2016-06-29 10 views
0

Mein Ziel ist es, Video-Stream von Capture-Karte (Blackmagic Decklink) zu OpenCV und Live-Stream zu red5 oder einem anderen rtmp-Server zu bekommen.OpenCV und Gstreamer Streaming Live-Video

Also habe ich versucht, mit zwei Zweig bei gstreamer mit Befehl ist unten ist funktioniert ordnungsgemäß. Aber wenn Sie mit OpenCV arbeiten, streamen Sie nur schwarze Frames an den rtmp-Server, opencv funktioniert übrigens gut.

GStreamer Befehl:

gst-Start-1.0 -v autovideosrc! tee name = t t. ! Videokonvertieren! Videoskalierung! Warteschlange ! x264enc pass = pass1 threads = 4 bitrate = 5000 tune = ZeroLatenz! Warteschlange ! flvmux streamable = wahr! rtmpsink Ort = "rtmp: //127.0.0.1/live/stb leben = 1" max-Verspätung = 100 t. ! Video/x-Roh, Breite = 1280, Höhe = 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); 

Meine Umgebung:

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

Wie kann ich damit umgehen?

Vielen Dank im Voraus.

Antwort

1

Das Problem ist, dass Sie gst-launch-1.0 dort verlassen, was natürlich nicht funktionieren würde.

Dies ist eine richtige Art und Weise:

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); 

von this Frage inspiriert ..

Und darüber im Klaren sein, dass es Probleme mit T-Shirt .. mit x264enc sind, weil manchmal die x264enc zu preroll viel will von Rahmen, die den anderen Zweig des T-Stücks überschwemmen können.

+0

OpenCV funktioniert gut, aber RTMP Strom ist noch schwarz. Wie kann ich damit umgehen? Sollte ich RTMP und x264enc ändern? – erdoganonur