2016-06-29 225 views
0

我的目標是將視頻流從採集卡(Blackmagic decklink)傳輸到OpenCV並實時傳輸到red5或任何其他rtmp服務器。OpenCV和Gstreamer流媒體直播視頻

所以,我試着用gstreamer中的兩個分支完成命令,下面是正常工作。但是,與OpenCV一起使用時,只需將黑幀傳輸到rtmp服務器,就像opencv運行良好。

的Gstreamer命令:

GST推出-1.0 -v autovideosrc! tee name = t t。 ! videoconvert! videoscale!隊列! x264enc pass = pass1 threads = 4 bitrate = 5000 tune = zerolatency!隊列! 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

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包裝
  • 的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); 

通過this問題的啓發..

並且要注意是否有使用x264enc與三通..一起的問題,因爲有時候x264enc想前滾動不少幀可能充斥其他分支的三通..

+0

OpenCV運行良好,但RTMP流仍然是黑色的。我該如何處理它?我應該改變RTMP和x264enc嗎? – erdoganonur