2011-03-31 98 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 \ 
    ... 

如果您不更改视频编码参数(大小,比特率​​等),则该字符串将保持不变。所以,你可以硬编码它。