【问题标题】:How to stream RTSP camera feed in Windows Forms c# using Vlc.DotNet如何使用 Vlc.DotNet 在 Windows 窗体 c# 中流式传输 RTSP 摄像机源
【发布时间】:2018-05-18 13:15:32
【问题描述】:

我已按照 link 的说明将 Vlc.DotNet 库(.Core.Core.Interops.Forms.Wpf)添加到我的项目解决方案中。

我还添加了 3.0.0 版本的 VideoLAN.LibVLC.Windows 库。

我在表单中添加了一个 vlcControl,这是生成的 Designer.cs

// 
// vlcControl1
// 
this.vlcControl1.BackColor = System.Drawing.Color.Black;
this.vlcControl1.Location = new System.Drawing.Point(384, 357);
this.vlcControl1.Name = "vlcControl1";
this.vlcControl1.Size = new System.Drawing.Size(75, 23);
this.vlcControl1.Spu = -1;
this.vlcControl1.TabIndex = 6;
this.vlcControl1.Text = "vlcControl1";
this.vlcControl1.VlcLibDirectory = ((System.IO.DirectoryInfo)(resources.GetObject("vlcControl1.VlcLibDirectory")));
this.vlcControl1.VlcMediaplayerOptions = null;

我已将虚拟 VlcLibDirectory 添加到属性中,以便稍后更改。

我的vlcLib的x86版本的路径是:E:\testLouka\dansMaCamera2.0\dansMaCamera2.0\libvlc\win-x86

我尝试使用以下代码从 RTSP 流 url 获取视频源:

public partial class Form1 : Form
{
   public Form1()
   {
       InitializeComponent();

       this.vlcControl1 = new VlcControl()
       {
           Name = "vlc1",
           Location = new Point(0, 0),
           Dock = DockStyle.Fill,
           VlcLibDirectory = new DirectoryInfo(Path.Combine("E:\\testLouka\\dansMaCamera2.0\\dansMaCamera2.0", "libvlc", IntPtr.Size == 4 ? "win-x86" : "win-x64")),
           Spu = -1,
           VlcMediaplayerOptions = null,
           Enabled = true
       };
       string[] options = { ":network-caching=500" };

       vlcControl1.Play(new Uri(m_stream.URL), options);
   }
}

m_stream.URL 变量返回一个类似于“rtsp://admin:admin123@190.19.191.19/Stream0”的 RTSP 链接

我的表单出现了,但我的 vlcController 没有显示任何内容...

我查看了https://github.com/ZeBobo5/Vlc.DotNet 的 wiki,但我被卡住了......

我在这里做错了什么?

【问题讨论】:

    标签: c# winforms rtsp libvlc onvif


    【解决方案1】:

    您所要做的就是在表单中添加一个vlcControl,并在其VlcLibDirectoryNeeded 事件中添加一些代码。

    /// <summary>
    /// Looks for the vlc directory on the opening of the app
    /// Opens a dialog if the libvlc folder is not found for the user to pick the good one
    /// Folder for 32bits should be "libvlc\win-x86\" and "libvlc\win-x64\" for 64 bits
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void myVlcControl_VlcLibDirectoryNeeded(object sender, VlcLibDirectoryNeededEventArgs e)
    {
        var currentAssembly = Assembly.GetEntryAssembly();
        var currentDirectory = new FileInfo(currentAssembly.Location).DirectoryName;
    
        if (currentDirectory == null)
            return;
        if (IntPtr.Size == 4)
            e.VlcLibDirectory = new DirectoryInfo(Path.GetFullPath(@".\libvlc\win-x86\"));
        else
            e.VlcLibDirectory = new DirectoryInfo(Path.GetFullPath(@".\libvlc\win-x64\"));
    
        if (!e.VlcLibDirectory.Exists)
        {
            var folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();
            folderBrowserDialog.Description = "Select Vlc libraries folder.";
            folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop;
            folderBrowserDialog.ShowNewFolderButton = true;
            if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
            {
                e.VlcLibDirectory = new DirectoryInfo(folderBrowserDialog.SelectedPath);
            }
        }
    }
    

    然后,您可以在表单中添加某种播放按钮并播放任何想要的 rtsp 流!

    private void btnPlay_Click(object sender, EventArgs e)
    {
        myVlcControl.Play(MyStream.URL);//can test with rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov
    }
    

    如果串流链接没问题,你应该可以在Media-&gt;Open Network Stream...下的VLC应用程序上串流它

    【讨论】:

    • 我听说这有一个限制,你必须安装 VLC。
    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 2020-03-22
    • 2017-07-19
    • 2021-07-26
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多