LibVLC代码实现RTSP流失败,命令行及GUI正常,求排查
问题分析与修复
你的C#代码无法正常推流主要是因为缺少必要的流输出选项以及选项格式不正确,另外还有一个常见的坑需要注意:
关键修复点
- 流输出选项需要以
:sout=为前缀,而非直接写RTP配置 - 必须添加
:no-sout-all和:sout-keep两个选项保证RTSP流正常运行 - 确保
MediaPlayer实例不会被过早回收
修正后的代码
using LibVLCSharp.Shared; // 建议将这些实例声明为类成员变量,避免方法执行完后被GC回收 private LibVLC _libvlc; private MediaPlayer _player; public void StartRtspStream() { Core.Initialize(); _libvlc = new LibVLC("--input-repeat=65545"); _player = new MediaPlayer(_libvlc); var media = new Media(_libvlc, _catUri); // 正确配置RTSP流输出 media.AddOption(":sout=#rtp{mux=ts,sdp=rtsp://:8554/}"); // 禁止将流发送到所有输出设备(只保留RTSP流) media.AddOption(":no-sout-all"); // 保持流连接活跃,允许客户端随时接入 media.AddOption(":sout-keep"); _player.Play(media); }
修复说明
- 选项格式修正:命令行中的
--sout参数在LibVLC.NET的Media选项中需要写成:sout=前缀的形式,这是LibVLC内部选项的标准语法。 - 必要选项补充:
:no-sout-all:防止VLC将视频流同时输出到本地显示等其他设备,确保只推送RTSP流。:sout-keep:让VLC在播放开始后保持流服务运行,否则播放结束后RTSP服务会立即停止,客户端无法后续连接。
- 实例生命周期:将
LibVLC和MediaPlayer声明为类成员变量,避免方法执行完毕后被垃圾回收器销毁,导致流中断。
内容的提问来源于stack exchange,提问作者SnoopTheDog
相关产品推荐
相关产品推荐

