【问题标题】:libvlcsharp - how to force multicast from rtsp stream cameralibvlcsharp - 如何从 rtsp 流摄像头强制多播
【发布时间】: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


【解决方案1】:

singleLibVLC = new LibVLC(" --rtsp-mcast " );

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

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

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

media.AddOption(":rtsp-mcast") 虽然我怀疑它会更好。

还有什么需要在应用程序中完成以允许 UDP 传输工作

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

将 VLC 的详细日志记录(在哪里可以工作)与基于 libvlc 的应用程序(在哪里不工作)进行比较,这是解决您的应用程序可能缺少哪些步骤的好方法,而 VLC 应用程序会自动执行这些步骤。

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

【讨论】:

  • 我无法直接解决这个问题——也就是说,当流式传输 Axis 相机时,我无法让控件表现得像 VLC。因此,我使用另一台计算机接收 Axis 流并生成 UDP 流,并且能够在一个应用程序中使用一个摄像头和 16 个控件实例进行压力测试。所以我会将其标记为解决方案。
猜你喜欢
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
  • 2020-03-22
相关资源
最近更新 更多