我尝试使用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 ...
提前致谢!!
答案 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 \
...
如果您不更改视频编码参数(大小,比特率等),则此字符串将保持不变。所以,你可以硬编码。