如何在 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 也有身份验证。
- 打开 VLC 媒体播放器
- 打开调试日志记录
- 播放您的直播
- 输入凭据
- 记下日志中显示的 VLC 使用的 URL window(类似于
"rtsp://192.168.1.62:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif&user=admin&password=xxx"
)。
- 将 URL 提供给 Vlc.DotNet 媒体播放器并调用播放。
- 利润。
您提到的 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));
我不熟悉在 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 也有身份验证。
- 打开 VLC 媒体播放器
- 打开调试日志记录
- 播放您的直播
- 输入凭据
- 记下日志中显示的 VLC 使用的 URL window(类似于
"rtsp://192.168.1.62:554/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif&user=admin&password=xxx"
)。 - 将 URL 提供给 Vlc.DotNet 媒体播放器并调用播放。
- 利润。
您提到的 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));