特定RTSP摄像头推流Kinesis Video Streams失败排查
问题根因
核心触发逻辑是高启动延迟的RTSP源和现有GStreamer管道、KVS SDK的默认超时/帧校验规则不匹配:
- KVS要求上传的H264流必须在首个关键帧前携带SPS/PPS参数集,且帧按AVC访问单元对齐,否则所有传入帧都会被判定为无效直接丢弃
- 默认kvssink的连接超时、低带宽判定阈值是针对低延迟源设计的,源启动超过30秒没出有效帧就会触发低带宽断流、CURL读暂停
- 默认rtspsrc的缓冲、超时参数偏激进,高延迟源容易在建连阶段丢关键帧、参数集,导致后续帧全部无效
可落地修复步骤
1. 替换为适配高延迟源的完整推流管道
直接使用调整完参数的命令,核心补充了超时拉长、帧格式强制对齐、KVS端适配参数:
gst-launch-1.0 -q rtspsrc location=MYRTSP_URL short-header=TRUE latency=3000 tcp-timeout=10000000000 retry=5 connection-speed=0 protocols=tcp ! rtph264depay ! h264parse config-interval=-1 disable-passthrough=TRUE ! video/x-h264,stream-format=avc,alignment=au ! kvssink stream-name=MYSTREAM_NAME storage-size=128 access-key=MYACCESS_KEY secret-key=MYSECRET_KEY aws-region=us-east-1 retention-period=168 connection-timeout=60000 low-bandwidth-limit=10 fragment-duration=2000 key-frame-fragmentation=TRUE frame-timestamp-rate=90000
参数调整说明:
- rtspsrc段:强制TCP传输避免UDP丢包,设置3秒缓冲、10秒TCP超时、关闭带宽限速,适配慢启动源
- h264parse段:禁用透传模式,强制在关键帧前重复插入SPS/PPS参数集,解决KVS缺参数集丢帧问题
- 新增cap过滤:强制输出AVC格式、按访问单元对齐的H264帧,符合KVS的输入要求
- kvssink段:连接超时拉长到60秒,调低低带宽判定阈值,开启关键帧分片,固定H264标准90k时基,避免提前触发断流、时间戳错乱丢帧
2. 仍异常时的排查操作
- 先验证RTSP源本地收流正常:执行命令
gst-launch-1.0 -q rtspsrc location=MYRTSP_URL short-header=TRUE latency=3000 protocols=tcp ! rtph264depay ! h264parse ! mp4mux ! filesink location=test.mp4,等待1分钟后终止进程,若本地test.mp4可正常播放,说明源端传输无问题,故障点在kvssink适配;若文件无法播放,优先排查摄像头端的编码配置、网络连通性 - 开启debug日志定位具体丢帧原因:推流前执行
export GST_DEBUG=kvssink:4,再启动推流命令,日志会明确打印丢帧原因(缺参数集、时间戳错误、帧格式非法等)
特殊场景注意:如果RTSP源输出的是H265编码,需要将管道中的
rtph264depay/h264parse替换为rtph265depay/h265parse,同时给kvssink追加参数codec-id=V_MPEGH/ISO/HEVC,否则会出现全量帧丢弃。
内容的提问来源于stack exchange,提问作者Winner Martins
相关产品推荐
相关产品推荐

