LibVLCSharp推流RTSP后本地无法访问rtsp://127.0.0.1:53211问题
问题原因
- 参数格式错误:
AddOption每次仅能传入单个LibVLC参数,你将多个参数合并为一个字符串传入会导致参数无法被识别,同时参数中混用双横杠(--)前缀不符合LibVLCSharp的参数传入规范,所有参数都需要以单冒号(:)开头。 - 像素格式配置错误:
chroma参数用于指定输入设备的像素格式(如YUYV、I420等),你错误配置为编码格式mp2v,导致摄像头采集的原始帧无法被正常处理。 - 音频转码配置错误:你的输入源是纯视频的摄像头设备,没有音频流,
transcode配置中指定acodec=mpga会导致转码链路因缺少音频输入卡住,无法输出流。 - RTSP流路径缺失:SDP配置中仅指定了监听端口,未指定流路径,客户端访问根路径无法匹配到输出流。
- 缺少日志输出配置:初始化LibVLC时未开启日志等级,导致内部错误无法被捕获,无法定位问题。
解决方法
- 拆分所有参数,每个
AddOption仅传入一个参数,统一使用单冒号前缀 - 删除错误的
chroma=mp2v配置,保留v4l2的分辨率参数,改为合法的单冒号前缀格式 - 移除转码配置中的音频编码参数,纯视频流无需配置acodec
- 在RTSP的SDP配置中添加流路径,比如
rtsp://:53211/stream,客户端访问对应路径即可 - LibVLC初始化时添加日志参数,方便排查问题
修正后完整代码
using System; using LibVLCSharp.Shared; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Core.Initialize(); // 初始化时开启日志输出,等级2可以看到警告和错误信息 using var libVlc = new LibVLC("--verbose=2"); using var mediaPlayer = new MediaPlayer(libVlc); mediaPlayer.EndReached += (_, x) => { Environment.Exit(1); }; var media = new Media(libVlc, "v4l2:///dev/video0", FromType.FromLocation); // 拆分单个参数分别添加 media.AddOption(":v4l2-standard=ALL"); media.AddOption(":live-caching=300"); media.AddOption(":v4l2-width=1280"); media.AddOption(":v4l2-height=720"); // 移除音频编码配置,添加RTSP流路径 media.AddOption(":sout=#transcode{vcodec=mp2v,fps=30}:rtp{mux=ts,sdp=rtsp://:53211/stream}"); media.AddOption(":sout-keep"); mediaPlayer.Play(media); Console.ReadKey(); } } }
修改后使用VLC访问地址rtsp://127.0.0.1:53211/stream即可正常拉流。
内容的提问来源于stack exchange,提问作者Node.JS
相关产品推荐
相关产品推荐

