使用Amazon Kinesis Video Streams推送RTSP摄像头流时遇资源访问错误
先看日志里的核心错误:
Error received from element source: Not found
Debugging information: gstrtspsrc.c(6536): gst_rtspsrc_send (): /GstPipeline:rtsp-kinesis-pipeline/GstRTSPSrc:source:
Not Found (404)
从日志流程能确定,Amazon Kinesis Video Streams相关操作完全正常:客户端创建成功、CCTVStream流状态为ACTIVE、流端点和令牌已获取、流就绪。问题出在GStreamer的rtspsrc组件访问RTSP URL时返回404——虽然VLC和ffplay能播放,但两者的RTSP客户端实现与GStreamer不同,需从以下方向排查:
1. 先验证GStreamer本身能否访问RTSP流
直接用GStreamer测试播放,排除KVS的干扰:
gst-launch-1.0 rtspsrc location=rtsp://myrtspUrl ! decodebin ! autovideosink
如果这个命令也报404,说明是GStreamer与RTSP服务器的兼容性问题,和KVS无关。
2. 检查RTSP URL格式与权限
- 若URL包含特殊字符(空格、@、!等),必须做URL编码(比如空格替换为
%20),GStreamer对格式要求比VLC严格 - 带用户名密码的URL,确保格式为
rtsp://用户名:密码@IP:端口/路径,密码中的特殊字符也要编码 - 尝试将IP与域名互换,部分RTSP服务器对访问方式有特定要求
3. 调整GStreamer RTSP插件参数
VLC的RTSP客户端实现与GStreamer的rtspsrc不同,可强制使用TCP传输(默认可能为UDP,部分服务器不支持):
如果kvs_gstreamer_sample支持自定义管道,执行以下命令:
AWS_ACCESS_KEY_ID=myAccessKey AWS_SECRET_ACCESS_KEY=MySecretKey ./kvs_gstreamer_sample CCTVStream "rtspsrc location=rtsp://myrtspUrl protocols=tcp ! rtph264depay ! h264parse ! video/x-h264,stream-format=avc,alignment=au ! kvssink stream-name=CCTVStream"
若不支持自定义管道,需修改kvs_gstreamer_sample源码中的GStreamer管道配置,给rtspsrc添加protocols=tcp参数。
4. 排查网络环境
- 运行kvs_gstreamer_sample的机器,能否ping通RTSP服务器IP?
- 防火墙/安全组是否放行该机器访问RTSP服务器端口(通常为554或自定义端口)?
- 必须在同一台机器上测试VLC与GStreamer,排除跨机器的网络差异
5. 确认RTSP流编码格式
kvs_gstreamer_sample默认仅支持H.264(AVC)格式视频流,用ffprobe查看流的详细信息:
ffprobe rtsp://myrtspUrl
若流为H.265或其他格式,需修改管道添加转码步骤,比如用x264enc转成H.264后再推送给KVS。
内容的提问来源于stack exchange,提问作者Ashish Mishra

