【问题标题】:C# - Play a video from a server with embedded vlc player?C# - 从带有嵌入式 vlc 播放器的服务器播放视频?
【发布时间】:2017-08-01 11:05:48
【问题描述】:

在我的 Winforms 应用程序中,我有一个包含数据库数据的 DataGridView。在数据中还存放了视频的文件路径。路径应该交给VLC播放器,然后播放视频。

使用本地文件路径,它正在工作。但是,只要视频在服务器上,就不会播放视频。

如何在没有本地 PC 的情况下从服务器播放视频?

datagridview所在的代码:

    private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        string path = dataGridView1.Rows[e.RowIndex].Cells[6].Value.ToString();
        Wiedergabe wiedergabe = new Wiedergabe(path); // new form with the player

        wiedergabe.Show();
    }

然后以应该播放视频的形式:

    public Wiedergabe(string path)
    {
        InitializeComponent();
        this.path = path;
    }

    private void Wiedergabe_Load(object sender, EventArgs e)
    {
        vlc_Player.volume = 50;
        vlc_Player.playlist.add("file:///"+path);
    }

【问题讨论】:

  • 如何访问服务器?您使用的是哪种协议?
  • 我认为它的 TCP/IP 和共享内存
  • 让我这样问:服务器路径是什么样的?例如。 \\server\path\file
  • 看起来像这样:\\server\\d$\\Test_Media\\Videos\\Pigeon.mp4
  • 好的,现在你需要添加你正在使用的代码。见minimal reproducible example

标签: c# video server stream


【解决方案1】:

正如我在评论中提到的,您需要通过已经输入凭据(凭据已经在 Credentials Store 中)或手动添加它们来访问您的服务器。

首先我们要检查网络共享是否可以使用

//Wiedergabe.cs / Form_Load
string dir = Path.GetDirectoryName(path);
if (!Directory.Exists(dir))

在您的示例中,您声明您的文件位于\\server\\d$\\Test_Media\\Videos\\Pigeon.mp4。所以dir 将是\\server\\d$\\Test_Media\\Videos

要将凭据存储在存储中,我们需要有服务器名称 (server)。让我们为此使用一个简单的正则表达式:

private readonly string regexPatternShare = @"\\\\(.*?)\\";

string share = Regex.Match(dir, regexPatternShare).Groups[1].Value; //returns server

通过在 NuGet 控制台中输入以下内容来下载 NuGet 包 Windows Credentials Manager Api

安装包 Simple.CredentialManager -Version 1.0.0

构建一个具有用户名和密码TextBox 的表单并通过以下方式保存凭据:

Credential shareCred = new Credential(txtUsername.Text, txtPassword.Text, share, CredentialType.DomainPassword);
shareCred.PersistenceType = PersistenceType.LocalComputer;
shareCred.Save();

那么你应该准备好了,文件应该可以访问了。

【讨论】:

  • 谢谢!我要试试这个。但是是否可以使用 Windows 身份验证作为凭据?那太好了。
  • 通常它应该自动执行此操作。您确定,您使用的是相同的凭据吗? (Active Directory?)您可以致电WindowsIdentity.GetCurrent() 获取您的凭据。但是你不能通过这种方式获得密码(显然)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 2011-03-08
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
相关资源
最近更新 更多