如何在 C# 上从 VLC 播放 RTSP

How to play RTSP from VLC on C#

我不熟悉在 C# winforms 上使用 VLC。我使用 Vlc.DotNet.Forms.dll 在我的 C# 项目上安装或添加了一个 vlcControl。以下是有关如何在我的项目中安装 vlcControl 的指南:

https://github.com/ZeBobo5/Vlc.DotNet/wiki/Using-Vlc.DotNet-in-WinForms

我还在我安装的 VLC 播放器上测试了我的 RTSP 视频,它工作正常,我有 RTSP link。

我想知道如何在添加的 vlcControl 上播放 RTSP?我的 RTSP 也有身份验证。

  1. 打开 VLC 媒体播放器
  2. 打开调试日志记录
  3. 播放您的直播
  4. 输入凭据
  5. 记下日志中显示的 VLC 使用的 URL window(类似于 "rtsp://192.168.1.62:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif&user=admin&password=xxx")。
  6. 将 URL 提供给 Vlc.DotNet 媒体播放器并调用播放。
  7. 利润。

您提到的 wiki link 已过时。此 link 提供了更多 "up-to-date" 信息:https://github.com/ZeBobo5/Vlc.DotNet/wiki/Getting-started#vlcdotnetforms

您还可以查看此示例以了解其工作原理:https://github.com/ZeBobo5/Vlc.DotNet/tree/develop/src/Samples/Samples.WinForms.Minimal

关于身份验证,您可以使用 URL 中的凭据,例如 rtsp://user:pass@.../,但这被认为是一种不好的做法,会导致警告。

自 VLC 3.0 以来的新方法是使用 libvlc 对话框 API。 使用 Vlc.DotNet,您可以通过实现 IVlcDialogManager 来使用它。您可以在此处查看示例实现(对于 WPF,但相同的逻辑适用于所有平台):https://github.com/ZeBobo5/Vlc.DotNet/blob/develop/src/Samples/Samples.Wpf.Dialogs/MetroDialogManager.cs

例如,您可以这样做:

    public class MyDialogManager : IVlcDialogManager
    {
        public async Task<LoginResult> DisplayLoginAsync(IntPtr userdata, IntPtr dialogId, string title, string text, string username, bool askstore,
            CancellationToken cancellationToken)
        {
            return new LoginResult
            {
                Username = "username",
                Password = "password",
                StoreCredentials = false
            };
        }

        public Task DisplayErrorAsync(IntPtr userdata, string title, string text)
        {
            // You could log errors here, or show them to the user
            return Task.CompletedTask;
        }

        public async Task DisplayProgressAsync(IntPtr userdata, IntPtr dialogId, string title, string text, bool indeterminate, float position,
            string cancelButton, CancellationToken cancellationToken)
        {
            return Task.CompletedTask;
        }

        public void UpdateProgress(IntPtr userdata, IntPtr dialogId, float position, string text)
        {
        }

        public async Task<QuestionAction?> DisplayQuestionAsync(IntPtr userdata, IntPtr dialogId, string title, string text, DialogQuestionType questionType,
            string cancelButton, string action1Button, string action2Button, CancellationToken cancellationToken)
        {
            return Task.FromResult<QuestionAction?>(null);
        }
    }

这样使用:

mediaPlayer.Dialogs.UseDialogManager(new MyDialogManager(this));