65.9K
CodeProject 正在变化。 阅读更多。
Home

音频和视频播放器 C# Winform

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.98/5 (22投票s)

2015年1月28日

CPOL

3分钟阅读

viewsIcon

187513

downloadIcon

18424

如何使用 C# 在 Windows 应用程序中播放音频/视频和 YouTube 视频

引言

本文的主要目的是解释如何使用 C# 创建一个简单的音频/视频和 YouTube 视频的 Windows 应用程序。用户可以选择音频或视频文件并添加到播放列表中,然后播放歌曲或视频文件。我使用了两个 Com 组件来播放音频/视频和 YouTube 视频 URL。在我的项目中,我使用了以下Com 组件

  1. Windows Media Player 对象
  2. Shockwave Flash 对象

音频/视频播放器

我的应用程序可以播放 Windows Media Player 支持的任何音频或视频文件。首先也是最重要的事情是,我们需要将 Windows Media Player Com 组件添加到我们的项目中。

如何将 Windows Media Player Com 组件添加到我们的 Windows 应用程序?

  1. 创建你的 Windows 应用程序。
  2. 工具 (Tools) 窗口,单击 选择项目 (Choose Items)
  3. 选择 Com 组件 (Com Components) 选项卡。
  4. 搜索 "Windows Media Player" 并单击 确定 (OK)

现在你可以看到 Windows Media Player 将被添加到你的 工具 (Tools) 窗口。只需将控件拖放到你的 winform 上。

在这里,你可以看到我的音频/视频播放器屏幕

我的音频/视频播放器具有以下功能

  • 加载音频/视频文件并添加到播放列表
  • 播放音频/视频文件
  • 暂停音频/视频文件
  • 停止音频/视频文件
  • 播放上一首歌曲
  • 播放下一首歌曲
  • 播放播放列表的第一首歌曲
  • 播放播放列表的最后一首歌曲

YouTube 播放器

为了在我们的 Windows 应用程序中播放任何 YouTube URL 视频,我们可以使用 Shockwave Flash 对象 Com 组件。
如何将 Shockwave Flash 对象 Com 组件添加到我们的 Windows 应用程序?

  1. 创建你的 Windows 应用程序。
  2. 工具窗口 (Tools Windows),单击 选择项目 (Choose Items)
  3. 选择 Com 组件 (Com Components) 选项卡。
  4. 搜索 "Shockwave Flash Object" 并单击 确定 (OK)

现在你可以看到 Shockwave Flash 对象将被添加到你的工具窗口。只需将控件拖放到你的 winform 上。

在这里,你可以看到我的 YouTube 屏幕。

* 注意 (Note):为了在我们的 Shockwave Flash 对象中播放 YouTube 视频,应该修改 YouTube URL。

例如,我们有 YouTube URL "https://www.youtube.com/watch?v=Ce_Ne5P02q0"。

为了播放此视频,我们需要从 URL 中删除 "watch?",并且我们需要将 "v" 之后的 "=" 替换 (replace) 为 "/"。

因此,例如,实际的 URL 应该像这样编辑 "http://www.youtube.com/v/Ce_Ne5P02q0" 。

如果我们不按上述方式编辑 URL,它将无法在 Shockwave 中播放。

Using the Code

音频/视频播放器代码

  1. 将音频和视频文件加载到我们的播放列表。在这里,使用 打开文件对话框 (Open File Dialog),我们可以过滤所有音频和视频文件。将所有文件名和路径添加到字符串数组并绑定到列表框。
     private void btnLoadFile_Click(object sender, EventArgs e)
            {
                Startindex = 0;
                playnext = false;
                OpenFileDialog opnFileDlg = new OpenFileDialog();
                opnFileDlg.Multiselect = true;
                opnFileDlg.Filter = "(mp3,wav,mp4,mov,wmv,mpg,avi,3gp,flv)|*.mp3;
                           *.wav;*.mp4;*.3gp;*.avi;*.mov;*.flv;*.wmv;*.mpg|all files|*.*";  
                if (opnFileDlg.ShowDialog() == DialogResult.OK)
                {
                    FileName = opnFileDlg.SafeFileNames;
                    FilePath = opnFileDlg.FileNames;
                    for (int i = 0; i <= FileName.Length - 1; i++)
                    {
                        listBox1.Items.Add(FileName[i]);
                    }
    
                    Startindex = 0;
                    playfile(0);
                }
            }
  2. 此方法将从第一个、下一个、上一个、最后一个和列表框选定索引更改事件中调用,并传递 "selectedindex" 值。在此方法中,从数组中,检查选定的文件,然后使用 "WindowsMediaPlayer.URL" 播放。
     public void playfile(int playlistindex)
            {
                if (listBox1.Items.Count <= 0)
                { return; }
                if (playlistindex < 0)
                {
                    return;
                }
                WindowsMediaPlayer.settings.autoStart = true;
                WindowsMediaPlayer.URL = FilePath[playlistindex];
                WindowsMediaPlayer.Ctlcontrols.next();
                WindowsMediaPlayer.Ctlcontrols.play();
            }
  3. Windows Media Player “PlayStateChange” 事件:这是 Windows Media Player 事件,每当播放器播放、暂停、停止等时都会触发。在这里,我使用此方法来检查歌曲或视频文件何时播放完成或结束。如果歌曲结束,那么我设置 "playnext = true"。在我的程序中,我使用了 Timer 控件,它将检查 "playnext = true" 状态并播放下一首歌曲。
     private void WindowsMediaPlayer_PlayStateChange
            (object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
            {
                int statuschk = e.newState;  // here, the Status returns the 
                                             // Windows Media Player status where the 8 is 
                                             // the Song or Video has completed the playing.
    
                // Now here, I check if the song is completed 
                // then I Increment to play the next song
    
                if (statuschk == 8)
                {
                    statuschk = e.newState;
    
                    if (Startindex == listBox1.Items.Count - 1)
                    {
                        Startindex = 0;
                    }
                    else if (Startindex >= 0 && Startindex < listBox1.Items.Count - 1)
                    {
                        Startindex = Startindex + 1;
                    }
                    playnext = true;
                }
  4. Windows Media Player 具有 playpausestop 等方法来控制播放器。
        WindowsMediaPlayer.Ctlcontrols.play();
        WindowsMediaPlayer.Ctlcontrols.pause();
        WindowsMediaPlayer.Ctlcontrols.stop();

Youtube 视频播放器 (Youtube Video Player):这是一个简单易用的对象。Shockwave 对象具有 Movie 属性。在这里,我们可以提供我们的 YouTube 视频进行播放。
在这里,在按钮单击事件中,我将文本框的输入提供给 Shockwave Flash 对象的 movie 属性。

 private void btnYoutube_Click(object sender, EventArgs e)
        {
            ShockwaveFlash.Movie = txtUtube.Text.Trim();
        }

历史

  • 2014年11月20日:初始发布
© . All rights reserved.