【发布时间】:2020-08-12 22:24:21
【问题描述】:
我正在使用 libvlcsharp VideoView 控件在 .net 中开发应用程序。 我需要从摄像机中提取多播流,所以我想设置命令行参数 --rtsp-mcast。
该应用程序的目的是使用大量摄像机流对视频系统进行压力测试,但我的摄像机数量有限,因此我需要来自几个摄像机的多个流。
例如使用 vlc 会是什么样子
vlc --rtsp-mcast rtsp://<ip>/axis-media/media.amp
我如何测试。我运行上面一次并注意任务管理器和资源监视器中的网络流量,然后我再次运行相同的命令,发现网络流量没有增加。我也使用:
netstat -aon
我查看了每个vlc实例的PID,发现它们都使用相同的两个UDP端口来发送和接收数据。
但是当我使用下面的代码来初始化 LibVLC
singleLibVLC = new LibVLC(" --rtsp-mcast " );
并使用来自同一摄像头的两个流运行,网络流量翻倍,并且为分配给我的测试应用程序的 PID 打开了两个不同的临时 TCP 端口。
我了解“--rtsp-mcast”指令最终会转发到 live555 模块。这是问题吗?从这里到那里是不可能的。或者...有其他方法可以传递这个参数吗?
还有一些事情需要在应用程序中完成以允许 UDP 传输工作。如果 VLC 或轴相机找不到使用 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 登录相比。
【问题讨论】:
-
@mfkl - 从 vlc 命令行和 Visual Studio 中的 vlcsharp 生成日志。这些日志具有相似的日志消息,但非常不同并且难以逐行比较。首先,我隔离了“using ... module”语句,发现 vlc 日志有超过 1000 个 using 语句,而 VLCSharp 日志有 76 个。我目视检查了两者的前 50 行,并在 VLC 日志中发现了一项我在 VLCSharp 日志中没有找到:“cache_read debug: Using stream method for AStream*”。还有其他项目,但它们似乎与流管理无关,如
-
继续...使用播放列表导出模块“导出”。缺少使用流过滤器模块“cache_read”(也缺少)是使用通过 UDP 传输的多播数据包的问题。如果是这样,我如何强制 VLCSharp 加载和使用这个模块?
-
@mfkl 因此,VLC 日志(流式多播)具有“cache_read 调试:使用 AStream 的流方法 *”VLC 日志没有引用 GStreamer,而 vlcsharp 日志有几行如下所示:服务器:GStreamer RTSP 服务器。 vlcsharp 日志没有对 AStream* 的引用。如果这确实是我需要做的,我需要一些帮助来理解差异以及如何要求 VLCSharp 库使用 AStream*。
-
@mfkl - 放弃尝试使用“--rtsp-mcast”让 Axis 摄像机切换到多播,而是使用 vlc 从 rtsp 单播流转码为 RTP/多播流然后将其引入我的 .net 应用程序的 VLCSharp 库中。这解决了我开发测试环境的直接问题。
标签: .net multicast libvlcsharp