在 Winforms 应用程序中使用 Windows 媒体播放器播放视频时出现问题

Problems playing video with Windows Media Player in Winforms App

目标。 我在 Visual Studio 2019 年创建了一个 9-Form 应用程序,我正在尝试以我的一种形式播放存储在与我的 winforms 应用程序的可执行文件 (.exe) 相同的文件夹。

Steps. 我通过 'COM Components' 安装了 Windows 媒体播放器功能,并显示在我的工具箱中(虽然图标没有' 出现在工具箱内的标题旁边)。之后,我将 'n' 拖放到我的表单中,以便根据 Microsoft 文档编写以下代码。

private void button1_Click(object sender, System.EventArgs e)
{
      axWindowsMediaPlayer1.URL = "video delphi.mp4";
}

实际结果。 虽然当我在我的表单中拖动播放器时,它应该显示,但是当我 运行 应用程序时,它变成了空白,因为它从未被放置在那里或在我的表格中被拖动/使用。我已经从播放器可见和启用的属性中进行了检查。在某些时候,通过按下播放按钮,我只能听到音频而听不到视频。

收到错误/通知。 1. 当我第一次尝试查看发生了什么时,我在我的应用程序运行期间收到了一条通知,指出该文件未被支持,虽然没有向我显示 (.mp4) 扩展名,但它只显示 (,) 符号。该通知不是来自 VS 2019,而是来自播放器本身。 2. 目前我收到 C00D1179 错误,而上述通知不再出现。

要使用 Windows 媒体播放器播放 .mp4 文件,请尝试以下已经过测试的方法。

先决条件:如果尚未安装,则必须安装“mp4”编解码器 - 例如 K-Lite codec pack 或其他编解码器包。

VS 2019:

创建一个新项目

  • 单击文件

  • Select 新建

  • Select 项目

  • Select 如下:

  • 单击 Windows 表单应用程序 (.NET Framework)

  • 点击下一步

  • 输入所需的项目名称(例如:MediaPlayerTest)

  • 单击创建

添加引用

  • 在 VS 菜单中,单击 项目
  • Select 添加引用...
  • 单击 COM
  • Select Windows 媒体播放器
  • 点击确定

打开解决方案资源管理器:

  • 在 VS 菜单中,单击 查看
  • Select 解决方案资源管理器

在设计器中打开 Form1

  • 在解决方案资源管理器中,双击 Form1.cs

打开工具箱:

  • 在 VS 菜单中,单击 查看
  • Select 工具箱
  • 搜索:Windows 媒体播放器
  • 如果 Windows Media Player 未找到,请将其添加到工具箱。

将 Windows 媒体播放器添加到工具箱(如果工具箱中尚不存在)

  • 右键单击 所有 Windows 表单
  • Select 选择项目....
  • 加载完成后,单击 COM 组件
  • 选中“Windows 媒体播放器**。
  • 点击确定
  • Windows 媒体播放器现在应该存在于工具箱中的“所有 Windows 表单”下。

将 Windows 媒体播放器添加到 Form1

  • 将 Windows 媒体播放器从工具箱拖到 Form1 上。

向 Form1 添加按钮

  • 将两个按钮从工具箱拖到 Form1 上
  • 将按钮 1 重命名为 btnPlay
  • 将按钮 2 重命名为 btnStop
  • 双击btnPlay创建点击事件处理程序
  • 双击btnStop创建点击事件处理程序

Modify/add 编码为 Form1.cs

  • 在解决方案资源管理器中,右键单击 Form1.cs
  • Select 查看代码

将所需的 .mp4 文件(例如:ocean.mp4)复制到您的 .exe 文件所在的文件夹。

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MediaPlayerTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            axWindowsMediaPlayer1.uiMode = "none";
        }

        private void btnPlay_Click(object sender, EventArgs e)
        {
            string filename = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().FullName), "ocean.mp4");
            axWindowsMediaPlayer1.URL = filename;
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            //stop
            axWindowsMediaPlayer1.Ctlcontrols.stop();
        }
    }
}

测试媒体播放器:

  • 运行 你的程序
  • 单击播放按钮

资源: