You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GStreamer中RTSP转SRT播放报错“无法识别流类型”的解决方法

解决Gst-play无法识别SRT流的问题

这个报错的核心原因很明确:你当前的RTSP转SRT推流命令没有给视频流添加标准容器封装,而gst-play需要依赖容器格式(比如MPEG-TS)来识别流的类型,所以才会提示"Could not determine type of stream"。

对比你之前能用的videotestsrc推流命令,你会发现当时特意用了mpegtsmux alignment=7把编码后的H264流封装成了MPEG-TS格式,这就是gst-play能正常播放的关键。而现在的RTSP转推命令直接把处理后的raw视频(或者未封装的H264裸流)发给了srtsink,缺少了容器封装这一步。

修正后的推流命令

我们可以优化推流pipeline,避免不必要的解码再编码(直接复用RTSP源的H264流,减少性能损耗),同时添加MPEG-TS封装:

gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/main latency=100 ! queue ! rtph264depay ! h264parse ! mpegtsmux alignment=7 ! queue leaky=downstream ! srtsink uri="srt://:8888" sync=false async=false

各环节说明:

  • rtph264depay:从RTSP的RTP包中提取原始H264裸流
  • h264parse:解析H264流的结构,生成正确的NALU边界信息,确保后续封装能正常识别
  • mpegtsmux:将H264流封装为MPEG-TS容器(和你之前成功的推流格式一致)

带音频的扩展方案(如果RTSP源包含音频)

如果你的RTSP流同时包含音频,可以把音频流也加入TS封装,比如假设音频是AAC格式:

gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/main latency=100 name=src \
src. ! queue ! rtph264depay ! h264parse ! mpegtsmux name=mux \
src. ! queue ! rtpmp4gdepay ! aacparse ! mux. \
mux. ! queue leaky=downstream ! srtsink uri="srt://:8888" sync=false async=false

(如果音频是其他编码,比如Opus,把rtpmp4gdepay换成rtpopusdepay,aacparse换成opusparse即可)

验证播放

修改推流命令后,直接用你原来的gst-play命令就能正常播放了:

gst-play-1.0 srt://127.0.0.1:8888

内容的提问来源于stack exchange,提问作者Mike05

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:51:52