使用GStreamer连接IP摄像头RTSP流时遇连接与认证错误
GStreamer连接RTSP摄像头流失败的解决方法
核心问题分析
你第一个测试管道里的RTSP地址包含$符号,这是Shell的特殊变量标记,会被Shell提前解析,导致实际传给rtspsrc的地址变成了rtsp://admin:password192.168.2.1:554/ch1/main/av_stream——原本的@符号被Shell解析丢失,GStreamer误以为admin是要连接的主机名,因此抛出Error resolving "admin": Name or service not known的错误。而不带密码的管道返回Unauthorized是正常现象,说明摄像头确实需要认证,只是之前的认证信息没正确传递。
修复方案
方案1:避免Shell解析特殊字符
把整个RTSP地址用单引号包裹,或者转义$符号,防止Shell篡改地址:
- 单引号包裹地址的管道:
GST_DEBUG=1 gst-launch-1.0 -v rtspsrc location='rtsp://admin:password$@192.168.2.1:554/ch1/main/av_stream' ! decodebin ! autovideosink
- 转义
$符号的管道:
GST_DEBUG=1 gst-launch-1.0 -v rtspsrc location=rtsp://admin:password\$@192.168.2.1:554/ch1/main/av_stream ! decodebin ! autovideosink
方案2:单独传递认证参数
如果URL拼接认证信息还是有问题,可以用rtspsrc的专属参数分别指定用户名和密码,彻底避开URL里的特殊字符问题:
GST_DEBUG=1 gst-launch-1.0 -v rtspsrc location=rtsp://192.168.2.1:554/ch1/main/av_stream user-id=admin user-pw='password$' ! decodebin ! autovideosink
额外说明
- 日志里的
XDG_RUNTIME_DIR not set只是警告,不影响RTSP流的连接,若要消除可以先执行:export XDG_RUNTIME_DIR=/tmp/runtime-$(whoami)
内容的提问来源于stack exchange,提问作者Axel
相关产品推荐
相关产品推荐

