问题描述
我正在使用libvlcsharp VideoView控件在.net中开发一个应用程序。 我需要从摄像机中提取多播流,因此我想设置命令行参数--rtsp-mcast。
该应用程序的目的是使用大量摄像机流对视频系统进行压力测试,但是我的摄像机数量有限,因此我需要来自几个摄像机的多个流。
例如使用vlc会是什么样子
vlc --rtsp-mcast rtsp://<ip>/axis-media/media.amp
我如何测试。我运行了一次以上,并注意到任务管理器和Resouce监视器中的网络流量,然后再次运行相同的命令,发现网络流量没有增加。我也用:
netstat -aon
我查找了vlc的每个实例的PID,发现两者都使用相同的两个UDP端口发送和接收数据。
但是,当我使用以下代码初始化LibVLC
singleLibVLC = new LibVLC(" --rtsp-mcast " );
并使用来自同一台摄像机的两个流运行,网络流量翻了一番,并且为分配给我的测试应用程序的PID打开了两个不同的临时TCP端口。
我知道“ --rtsp-mcast”指令最终会转发到live555模块。这是问题吗?从这里不可能到达那里。或者...有其他方法可以传递此参数吗?
在应用程序中还需要完成一些操作,以允许UDP传输正常工作。如果无法找到使用UDP连接的方式,则VLC或轴摄像机似乎默认为TCP。
@mfkl, 删除了命令行选项中的前导空格,如
singleLibVLC = new LibVLC("--verbose=2 --rtsp-mcast");
这使我对流的两个副本都使用UPD,但是每个流都使用不同的端口对。
我修改了命令行测试,如下所示:
vlc --verbose=2 --file-logging --logfile="%appdata%\vlc\out.log" --rtsp-mcast rtsp://etc.
解决方法
singleLibVLC =新的LibVLC(“ --rtsp-mcast”);
删除字符串开头和结尾的空格。
共享完整日志,在LibVLC ctor中添加“ --verbose = 2”。
或者...还有其他方法可以传递此参数吗?
media.AddOption(":rtsp-mcast")
,尽管我怀疑它会更好。
在应用程序中还需要做一些事情,以允许UDP传输正常工作
使用udp://blabla
作为媒体MRL是一种方法。
将基于VLC的详细日志记录(适用于它)与基于libvlc的应用程序(不起作用)进行比较,这是一种解决VLC应用程序自动进行故障排除的好方法。