2011-03-31 206 views
1

我嘗試使用流式傳輸和OpenCV的GStreamer的我的攝像頭......對於這第一個我測試使用此命令行:GStreamer的RTP流媒體網絡攝像頭

gst-launch v4l2src ! ffmpegcolorspace ! theoraenc ! rtptheorapay ! udpsink host=localhost port=5000 sync=false -v 

然後我嘗試使用此命令行看到流:

gst-launch udpsrc port=5000 caps="video/x-raw-yuv, format=(fourcc)I420, framerate=(fraction)30/1, width=(int)640, height=(int)480, interlaced=(boolean)false" ! rtptheoradepay ! theoradec ! ximagesink 

,但我得到一個錯誤:無法連接到udpsrc0和rtptheoradepay0無法鏈接到udpsrc0 rtptheoradepay0

然後我嘗試使用VLC來看看我從攝像頭全光照得g rtp:// @ localhost:5000但是沒有發生...

我做錯了什麼?

我運行Ubuntu 10.10在GStreamer和混帳repositorie編譯插件...

在此先感謝!

回答

1

Theora解碼器需要額外的配置參數。下面是該規範的摘錄:

Theora格式作出了同樣的爭議性設計決策Vorbis格式,以 提出包括在比特流標頭中的DCT係數和所有quan- tization整個參數概率模型。這通常是幾百個 字段。因此,如果沒有先前獲取編解碼器信息和編解碼器設置標頭的 ,則無法解碼流中的任何幀。

你可以看到這個配置參數如GST推出詳細的輸出過長... base64編碼字符串:

/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)THEORA, sampling=(string)YCbCr-4:2:0, width=(string)640, height=(string)480, configuration=(string)\"AAAAAbkkHgqZ...gA\\=\\=\", delivery-method=(string)inline, payload=(int)96, ssrc=(guint)109069492, clock-base=(guint)1126428223, seqnum-base=(guint)23181 

你需要複製這個字符串,並將其粘貼到接收GST-啓動腳本:

$ gst-launch \ 
    udpsrc \ 
     port=5000 \ 
     caps="video/x-raw-yuv \ 
      ,format=I420 \ 
      ,framerate=30/1 \ 
      ,width=640,height=480 \ 
      ,interlaced=false \ 
      ,configuration=(string)\"AAAAAbkkHgqZ...gA\\=\\=\"" \ 
    ! rtptheoradepay \ 
    ... 

如果您不更改視頻編碼參數(大小,比特率​​等),則該字符串將保持不變。所以,你可以硬編碼它。