问题标签 [libvlcsharp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
262 浏览

libvlcsharp - LibVLCSharp - 当密码为“@”时,如何使用密码和媒体选项播放 RTSP 流?

如果 RTSP 流密码是“pass@word”,我只能将密码添加到 url 中,如下所示:

rtsp://username:pass%40word@domain:port

将 @ 更改为 %40 对 URL 有效

但是当我尝试使用时: media.AddOption(":rtsp-pwd=pass@word");

身份验证失败。

使用 media.AddOption(":rtsp-pwd=pass%40word"); 也失败了。

0 投票
0 回答
109 浏览

c# - vlc uwp Dash 播放问题

我正在使用 VLC 进行 Instagram 实时播放。只要我在Libvlcsharp 3.4.6 VideoLAN.libvlc.UWP 3.1.1.1从实时破折号播放 URL 创建媒体时使用一切正常。但是当我更新上面的任何 NuGet 时,实时播放无法再播放,我只看到黑屏。不得不提的是,Windows Store 最新的 UWP VLC 播放器可以播放 URL,不知道怎么回事。谢谢。问候

0 投票
1 回答
178 浏览

macos - Mac 和 UWP 中 LibVLCSharp VideoView 的自定义渲染器 (Xamarin.Forms)

我正在尝试使用 LibVLCSharp for Mac 中的 VideoView 在 Xamarin.Forms 中创建自定义渲染器,以在 Xamarin.Forms mac 应用程序中播放视频。到目前为止,我只得到音频但没有视频。

这是我用于 mac 实现的 VideoPlayerRenderer

和 VideoPlayer Xamarin.Forms 视图

我在 UWP 上尝试过相同的方法,但没有音频或视频。所以我想知道这是否朝着错误的方向发展,如果是这样,你应该如何将 LibVLCSharp 用于 mac/uwp?

0 投票
1 回答
592 浏览

c# - 将低延迟视频从 Raspberry Pi 流式传输到 UWP-APP 的最佳方式

对于一个项目,我必须UWP-APP通过 TCP 与 Raspberry Pi Zero 进行通信。因为树莓派和带有接口的计算机都有私有 IP,所以我必须使用服务器将消息从一个客户端转发到另一个客户端。这部分已经有效,但现在我的问题是我必须实现从 Raspberry 到 UWP-APP 的视频流。

因为我的搭档负责创建和设计 UWP-APP,所以我给自己做了一个小测试接口WindowsForms。我已经尝试了几种技术,例如Netcat通过服务器将视频输出到客户端或使用 直接 TCP 流传输raspivid,但迄今为止最好的解决方案是我在这个项目中找到的。但是Eneter.Messaging-library我没有使用我自己的类来与 TcpClients 通信。

我使用 mono 在 Raspberry 上运行我的 C# 脚本,流式传输视频的代码如下所示:

基本上,这种方法只是从进程的 Standard-Output-Stream 中分块读取 h264 数据,raspivid并将其发送到服务器。

下一个方法在服务器上运行,只是将字节数组转发到连接的接口客户端。

SendByteArray() 使用 NetworkStream.Write() 方法。

在接口上,我将接收到的 byte[] 写入命名管道,VLC-Control 连接到该管道:

以下代码初始化管道服务器:

对于 VLC:

这在 Windowsforms-App 上运行良好,我可以将延迟降低到 2 或 3 秒(最终应该会更好,但可以接受)。但是在 UWP-App 上,即使将 /LOCAL/ 添加到管道名称后,我也无法使其工作。它显示 VLC-Control 连接到管道,我可以看到数据已写入管道但不显示视频。

所以我的问题是:

如何让它与 UWP 中的 VLC-Control (LibVLCSharp) 一起使用?我错过了一些基本的东西吗?

或者在这种情况下是否有更好的方式来传输视频?

我对 UWP-MediaPlayerElement 进行了一些研究,但我找不到将我的 byte[] 放入其中的方法。

0 投票
1 回答
404 浏览

c# - LibVLC# 通过 TCP 流式传输

我目前有代码返回一个有效的 URI 用于从 IP 摄像机流式传输。我把那个 uri 传递给一个流式传输的对象。我可以配置对象以便它们通过 TCP 流式传输吗?VLC 应用程序有一个设置,我可以通过 TCP 流式传输相同的 URI,因此我知道相机具有该功能。当我使用 VLC 应用程序时,它只是通过端口 554 强制 RTP 用于 TCP 视频流。目前使用此代码,它通过 554 设置 RTSP 并开始从不同端口通过 UDP 流式传输 RTP。我错过了什么?

uri 字符串返回格式为 Rtsp://MY-IP

我已经尝试了其他一些人推荐的方法,将其重新格式化为... rtsp-tcp://MY-IP,但它似乎不起作用(或者我做错了)。

//////////////////////////////// 编辑: //////////////// ////

0 投票
1 回答
218 浏览

c# - 使用具有 I420 色度的 SetVideoFormatCallbacks

我正在尝试将 LibVLCSharp 集成到使用 MonoGame 构建的游戏引擎中。

我已经使用它渲染并获得了不错的结果

不幸的是,它还不够好。到目前为止,我一直在使用另一个名为 Theora Playback Library ( https://www.cateia.com/libtheoraplayer/wiki/index.php?title=Main_Page ) 的视频库。有了它,我们可以获得非常流畅的视频播放,但我们正试图将我们的引擎移动到 64 位,而这个库没有这种能力。

查看 TPL 的源代码,我看到它正在将视频帧解码为 I420 缓冲区,然后将它们转换为 RGBA。我想看看用 LibVLCSharp 做同样的事情是否会提高播放性能,但我遇到了障碍。

I420 帧的缓冲区需要 3 个图片缓冲区,但 LibVLCVideoFormatCb 的委托签名似乎不允许您定义它。

libVLC 文档说线条和间距都是表格,应该允许您为每个图片缓冲区设置间距和线条

pitches:每个像素平面的扫描线间距表(以字节为单位)(该表由 LibVLC 分配)[OUT]

行:每个平面的扫描线计数表 [OUT]

但是在 LibVLCSharp 中,音高和线条都是 uint,所以当我需要设置 3 时,我只能设置 1 值。

有没有办法用现有的签名来定义 I420 缓冲区的格式,或者有没有另一种方法可以完全获取我不做的每一帧的解码 I420 帧数据?

0 投票
2 回答
214 浏览

c# - 如何使用 LibVLCSharp 将一系列图像转换为可播放的视频?

我有一系列图像,我可以使用 LibVLCSharp 从视频中提取这些图像。这个样本要更具体一些。我正在创建一个用于学习目的的小型视频库管理器,我想提取帧并创建缩略图以在用户将鼠标悬停在预览器上时播放。

使用上述示例,我能够围绕相同的日志创建 WPF UI,并从视频文件中提取帧。但是,我现在想要将这些提取的帧转换为视频文件,将它们用作视频的预览,就像在 YouTube 上发生的那样。

但是,我无法找出如何使用 LibVLCSharp 或仅使用 LibVLC 来实现这一目标。在超级用户上使用这个答案,我能够实现我的目标,并使用 ffmpeg 将这些帧组合成一个视频。

我还没有花时间研究 FFmpeg.Autogen,所以我不知道我是否能够以与使用 LibVLCSharp 相同的方式从视频文件中提取帧,但我没有看到在我的应用程序中使用这两个库,一个用于导出帧,一个用于将这些帧生成为视频。

那么,有没有办法使用 LibVLCSharp(或 libvlc)本身获取输出帧并将它们转换为可播放的视频?

0 投票
0 回答
211 浏览

udp - LibVLCSharp UWP 应用程序未在某些网络上运行

我正在通过 UDP 接收 mp4 流,并希望在 UWP 应用程序中实时显示视频。我正在使用 LibVLCSharp nuget 来显示视频流。尝试使用 UDP 流 URI 直接播放视频不起作用,因此我尝试通过本地 http 流传递通过 UDP 接收的数据,该流成功运行但引发以下异常,

“无法将数据写入传输连接:现有连接被远程主机强行关闭。”

随着数据大小(超过 30KB)和频率在某些网络上的增加,写入 http 流。

LibVLC LibVLC = new LibVLC(enableDebugLogs: true, eventArgs.SwapChainOptions);

MediaPlayer = new MediaPlayer(LibVLC);

using (media = new Media(LibVLC, new Uri("http://127.0.0.1:5001/video/")))

{

MediaPlayer.Play(media);

}

为了控制数据大小,我开始对通过 UDP 发送的数据进行分块,这增加了数据包的频率,从而使我的应用程序崩溃。为了控制频率,我在 2 个数据包之间添加了超时,这会导致视频延迟增加,因此视频总是滞后,以比原始更高的 FPS 运行,试图赶上但无法做到。

在这一点上,我没有想法,也无法确定为什么它在某些网络上没有任何问题而在其他网络上没有任何问题的具体原因。对此的任何帮助将不胜感激。

更新:应用程序崩溃时的完整日志

更新 2:HttpListener 代码

更新 3:直接流式传输 UDP 时的 LibVLC 日志

0 投票
1 回答
136 浏览

azure-media-services - 在 libvlcsharp 中为自适应流设置起始比特率

我正在使用 LibVlcSharp 在我的 Xamarin.Forms 应用程序中使用 EncoderNamedPreset.AdaptiveStreaming 设置播放由 Azure 媒体服务转码的自适应视频流 (HLS)。

观看我的视频时,我注意到视频的前几 (5-6) 秒非常模糊。

这可能是因为播放器以“安全”的低比特率开始,并且在下载了几块数据之后,它确定带宽足以显示更高质量的视频,并且可以切换质量。

最初几秒钟的低质量困扰着我,我宁愿让它以更高的比特率开始。

如果视频能更快地切换(<2 秒),我会很高兴,这可能意味着我需要一个不同的编码器设置来产生更小的视频“块”。

但也许更简单的解决方案是将起始比特率设置为更高的值。

我在其他媒体播放器上看到过这种情况,形式为 ams.InitialBitrate = ams.AvailableBitrates.Max<uint>();

LibVlc 有类似的选项吗?

0 投票
1 回答
384 浏览

c# - 使用 LIbVLCSharp 按顺序播放多个视频会导致内存增加很多

在播放播放列表大约两天后,内存从大约 100 兆字节增加到几千兆字节。线程数保持不变,大约 20 个线程。我正在处理来自 mediaplayer 元素的媒体(当更改为新媒体时),如下所示:

以及创建新媒体播放器时:

这足以像这样处置媒体吗?

当到达终点时,我会像这样播放下一个媒体,调用 init video 会调用第一段代码。在媒体播放器中切换媒体。

任何帮助表示赞赏。

我已将代码更改为此没有结果:

我已经注释掉了“last_media”部分,因为它没有效果。我将 web.MediaPlayer 设置为 null,因为在将 MediaPlayer 对象设置为其他对象之前,它会导致崩溃。

我会将媒体包装在“使用”中并明确处理它就足够了。但内存使用量仍在攀升。处理最后播放的媒体对象的正确方法是什么?