频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源:enet 作者:天极网 出处:巧巧读书 2007-09-28 进入讨论组
上一页 1 2 3 4 5 下一页 
  编写代码

  如何打开你想要媒体文件?

  第一步是编写在 frmPlayMedia中打开 Windows Media 文件的代码。要自动切换到 Code(代码)视图并编辑打开菜单的 Click 事件处理程序 (menuItem2_Click) 的代码,请双击窗体上的“工具栏”按钮。
将以下代码添加到事件处理程序中:

  还记得吗"文件 -> 打开..." 是的几乎每个使用windows的人都会这样操作.如何实现?

  很简单看看下面的代码:  

  OpenFileDialog openFileDialog = new OpenFileDialog();

  openFileDialog.Filter = "Media Files *.mpg;*.avi;*.wma;*.mov;*.wav;*.mp2;*.mp3 All Files *.*";

  if (DialogResult.OK == openFileDialog.ShowDialog())

  {

  ….

  }

  看吧很简单是吗?记得写一个函数把它放进去。当你点击OK按钮的时候,DirectShow接口就会得到你想要播放的文件。下图解释了它是如何工作的。

  DirectShow为多媒体流回放提供最基本的服务,这些多媒体流可以是本地文件,还可以是服务器传输过来的。特别的,DirectShow可以支持视频回放,支持以不同的文件和流格式压缩视频内容,包括Windows Media、MPEG、AVI和WAV。

  在DirectShow的核心处,服务是组件的模块化集合,称为过滤器,可以根据媒体类型排列成过滤器图。过滤器可以操作数据流,如读入、分析、解码、格式化或渲染。

  过滤器以树型进行排列,这棵树称为过滤器树,通过过滤器树管理器(Filter Graph Manager,简称FGM)进行管理。使用FGM应用程序可以通过使用Microsoft Windows Media Player控件间接控制过滤器树,还可以通过调用COM接口方法直接控制。DirectShow过滤器树(参阅图1)由从源到目标渲染器的有向过滤器序列组成,所有这些通过输入和输出过滤器引脚连接。过滤器引脚协商它们将支持哪些媒体类型。FGM控制树过滤器之间的多媒体数据流。因为DirectShow有一个灵活的、可重配置的过滤器树体系结构,因此DirectShow可以使用同样的软件成分支持多种媒体类型的回放和分流。开发人员还可以通过编写自己的过滤器扩展DirectShow多媒体支持。

  过滤器

  过滤器是注册的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;  

  //  

   巧巧读书:http://www.qqread.com/vc/k572118200.html

更多文章 更多内容请看Wlan组网----家庭专题专题,或进入讨论组讨论。
上一页 1 2 3 4 5 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章