gstreamer rtp流媒体摄像头

时间:2011-03-31 20:19:30

标签: ubuntu streaming gstreamer

我尝试使用OpenCV和gstreamer流式传输我的网络摄像头...首先我使用命令行进行测试:

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来查看我使用rtp:// @ localhost:5000从网络摄像头获得的内容但是没有发生任何事情......

我做错了什么???

我使用git repositorie编译的gstreamer和插件运行Ubuntu 10.10 ...

提前致谢!!

1 个答案:

答案 0 :(得分:1)

Theora解码器需要额外的配置参数。以下摘自规范:

Theora做出了与Vorbis相同的有争议的设计决定 包括DCT系数的全部概率模型和所有量子 比特流头中的tization参数。这通常是几百个 领域。因此,如果没有,则无法解码流中的任何帧 之前已获取编解码器信息和编解码器设置标头。

您可以在gst-launch详细输出中将此配置参数视为loooong 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-launch脚本:

$ 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 \
    ...

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

相关问题