利用Visual C#开发一个媒体播放器

豆豆网   技术应用频道   2006年08月02日  【字号: 收藏本文

本文详细介绍利用Visual C#开发一个媒体播放器

  过滤器

  过滤器是注册的DirectShow类,它执行许多媒体信息处理任务。这些任务包括:

  获得源信息(例如,获得媒体流)

  分析(例如,在流上执行包读入、分离和格式化)

  转换(例如,解码WMA和MPEG-4音频和视频流)

  渲染(例如,在适当的时候产生音频PCM或者视频RGB/YUV输出,将数据传给DirectSound和DirectDraw)

  过滤器使用几种类型的接口,例如引脚、计数器、传送器和时钟接口,来执行它们的任务。过滤器实现和开放了许多接口。FGM可以使用这些接口创建、连接和控制树。过滤器经常实现包含下列方法的IBaseFilter接口:

  运行、停止和暂停过滤器状态。

  恢复过滤器和厂商信息。

  得到和设置参考时钟。

  恢复过滤器状态信息。

  枚举过滤器引线。

  重建过滤器树时定位引脚

  用户单击“打开”时,这段代码将显示一个对话框,供用户在计算机上浏览并选择要播放的 .wma 或 .wmv 文件。用户选择文件(并单击“确定”)时,代码将 Player 的 URL 属性设置为用户选择的文件。由于 Player 的 autoStart 属性在默认情况下设置为 True,所以 Player 立即打开并播放用户选择的数字媒体文件。

  接下来,添加播放/暂停按钮的代码。在代码窗口中,在停止、暂停菜单中单击,然后,在方法名称列表中单击 Click。将以下代码添加到 Visual C# 为您创建的Click 事件处理程序中:

  看看下面的代码是如何实现的:

  CleanUp();
m_objFilterGraph = new FilgraphManager();
m_objFilterGraph.RenderFile(openFileDialog.FileName);
m_objBasicAudio = m_objFilterGraph as IBasicAudio;
try
{
 m_objVideoWindow = m_objFilterGraph as IVideoWindow;
 m_objVideoWindow.Owner = (int) panel1.Handle;
 m_objVideoWindow.WindowStyle = WS_CHILD | WS_CLIPCHILDREN;
 m_objVideoWindow.SetWindowPosition(panel1.ClientRectangle.Left,
 panel1.ClientRectangle.Top,
 panel1.ClientRectangle.Width,
 panel1.ClientRectangle.Height);
}
catch (Exception ex)
{
 m_objVideoWindow = null;
}
m_objMediaEvent = m_objFilterGraph as IMediaEvent;
m_objMediaEventEx = m_objFilterGraph as IMediaEventEx;
m_objMediaEventEx.SetNotifyWindow((int) this.Handle, WM_GRAPHNOTIFY, 0);
m_objMediaPosition = m_objFilterGraph as IMediaPosition;
m_objMediaControl = m_objFilterGraph as IMediaControl;
//
如何来播放,暂停,停止?
简单这些函数看字面也知道.
//
m_objMediaControl.Run();//播放
m_objMediaControl.Pause();//暂停
m_objMediaControl.Stop();//停止
// 这段代码非常简单。当用户单击播放/暂停按钮时,代码将检查 Player 的 playState 属性。如果 Player 正在播放数字媒体文件,代码就会暂停文件的播放; 如果 Player 已经暂停或停止,代码就再次启动 Player 播放文件。
OK,在来看我们是如何控制时间进度的?
//
private void timer1_Tick(object sender, System.EventArgs e)
{
 if (m_CurrentStatus == MediaStatus.Running)
 {
  UpdateStatusBar();
 }
}

作者:黎宇    责编:豆豆技术应用

正在加载评论...