libvlcsharp-如何从rtsp流摄像机强制多播

问题描述

我正在使用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.

与Visual Studio输出窗口中的vlc登录相比。

解决方法

singleLibVLC =新的LibVLC(“ --rtsp-mcast”);

删除字符串开头和结尾的空格。

共享完整日志,在LibVLC ctor中添加“ --verbose = 2”。

或者...还有其他方法可以传递此参数吗?

media.AddOption(":rtsp-mcast"),尽管我怀疑它会更好。

在应用程序中还需要做一些事情,以允许UDP传输正常工作

使用udp://blabla作为媒体MRL是一种方法。

将基于VLC的详细日志记录(适用于它)与基于libvlc的应用程序(不起作用)进行比较,这是一种解决VLC应用程序自动进行故障排除的好方法。

https://wiki.videolan.org/VLC_command-line_help

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...