如何通过C#开发一个媒体播放器(中)

简介:
开发应用程序
  创建通过  PIA   Framework  连接的  Player  控件实例之后,您可以向窗体中添加所需的其他元素,并编写完成实际操作的代码。
添加  Windows  窗体控件

   1.   View (视图)菜单中,单击  Designer 设计 器),或者单击  Solution Explorer (解决方案资源管理器)中的 View Designer (视图设计器)按钮,切换到窗体设计器。  

   2.  在窗体上增加文件、播放、信息等菜单。

   3.  在工具箱的  Windows Forms Windows  窗体)面板中,为您的窗体添加一个工具栏、一个状态栏和图片 imageList  

   4.   Properties (属性)窗口中,将工具栏的名称更改为  toolBar1 ,将在 Buttons 上增加 4 个按钮。状态栏的名称更改为  statusBar1, 并分别增加三个 Panel  

   5.  在工具箱的面板中,为您的窗体添加一个面版 panel1

   6.  增加一个定时器 timer1

   7.  调整控件在窗体中的排列方式,使之符合您的需要而且方便用户使用。下图为  Visual Studio Designer (设计器)中完成后的窗体布局。

 3

   编写代码

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

  第一步是编写在  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类,它执行许多媒体信息处理任务。这些任务包括:
     

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

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

       转换(例如,解码WMAMPEG-4音频和视频

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

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

       运行、停止和暂停过滤器状态。
     
       恢复过滤器和厂商信息。
     
       得到和设置参考时钟。
     
       恢复过滤器状态信息。
     
       枚举过滤器引线。
     
       重建过滤器树时定位引脚


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



本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/202828,如需转载请自行联系原作者

目录
相关文章
|
4天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
1月前
|
数据挖掘 C# 开发工具
采用C#语言开发的全套医院体检系统PEIS源码功能介绍
体检系统,是专为体检中心/医院体检科等体检机构,专门开发的全流程管理系统,通过软件实现检测仪器数据自动提取,内置多级医生工作台,细化工作将体检检查结果汇总,生成体检报告登记到计算机系统中。通过软件系统进行数据分析统计与评判以及建立体检相关的体检档案。从而实现体检流程的信息化,提高工作效率,减少手动结果录入的一些常犯错误。 在实际应用中,医院体检系统能够解决传统体检中手工操作带来的问题,如工作量大、效率低下、易漏检、重检或错检等。通过与医院信息系统(如HIS、LIS、PACS等)的连接,系统能够满足体检中心的日常工作流程,提供更好的管理、统计和查询分析功能。同时,基于网络基础的系统可以在网上传输
23 1
|
3月前
|
存储 C#
C#入门开发(Hello World,运算符)
C#入门开发(Hello World,运算符)
27 0
|
4月前
|
JavaScript C#
【傻瓜级JS-DLL-WINCC-PLC交互】2.wincc使用C#开发的.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】2.wincc使用C#开发的.net控件
41 0
|
4月前
|
SQL 关系型数据库 MySQL
C#程序设计案例开发教程
C#程序设计案例开发教程
47 0
|
4月前
|
网络协议 C# C++
BytesIO | C# 超简洁的TCP服务端开发(完整源码+视频教程)
本章将继续利用BytesIO开发TCP的服务端,简洁明了依然是主旋律,我们要在三十行代码内除了实现一个TCP服务端以外,使其支持聊天室(消息转发)、连接数限制、心跳超时检测等功能。 现在,一起跟着视频敲一敲吧!
162 0
BytesIO | C# 超简洁的TCP服务端开发(完整源码+视频教程)
|
4月前
|
存储 算法 数据处理
C# | 上位机开发新手指南(十一)压缩算法
流式压缩 流式压缩是一种能够实时处理数据流的压缩方式,例如音频、视频等实时传输的数据。 通过流式压缩算法,我们可以边读取边压缩数据,并能够随时输出已压缩的数据,以确保数据的实时性和减少存储和传输所需的带宽。 块压缩 块压缩则是将数据划分为固定大小的块,在每个块内进行独立的压缩处理。块压缩通常适用于文件、存储、传输等离线数据处理场景。 字典压缩 字典压缩是一种基于字典的压缩算法,通过建立一个字典来存储一组重复出现的字符串,并将这些字符串替换成字典中相应的索引,从而减少数据的存储和传输。字典压缩算法可以更好地处理数据中的重复模式,因为它们可以通过建立字典来存储和恢复重复出现的字符串。
45 0
C# | 上位机开发新手指南(十一)压缩算法
|
4月前
|
算法 C# 数据安全/隐私保护
C# | 上位机开发新手指南(十)加密算法——ECC
本篇文章我们将继续探讨另一种非对称加密算法——ECC。 严格的说,其实ECC并不是一种非对称加密算法,它是一种基于椭圆曲线的加密算法,广泛用于数字签名和密钥协商。 与传统的非对称加密算法(例如RSA)不同,ECC算法使用椭圆曲线上的点乘法来生成密钥对和进行加密操作,而不是使用大数分解等数学算法。这使得ECC算法具有相同的安全性和强度,但使用更少的位数,因此在资源受限的环境中具有优势。 ECC算法虽然使用公钥和私钥进行加密和解密操作,但是这些操作是基于点乘法实现的,而不是基于大数分解等算法实现的。因此,ECC算法可以被视为一种非对称加密算法的变体,但是它与传统的非对称加密算法有所不同。
130 0
C# | 上位机开发新手指南(十)加密算法——ECC
|
4月前
|
XML 算法 安全
C# | 上位机开发新手指南(九)加密算法——RSA
RSA的特性 非对称性 RSA算法使用公钥和私钥两个不同的密钥,公钥用于加密数据,私钥用于解密数据。公钥可以公开,任何人都可以使用,而私钥只有密钥持有人可以访问。 安全性 RSA算法基于大数分解难题,即将一个大的合数分解成其质数因子的乘积。由于目前没有有效的算法可以在合理的时间内对大质数进行分解,因此RSA算法被认为是一种安全的加密算法。 可逆性 RSA算法既可以用于加密,也可以用于解密。加密和解密都是可逆的过程,只要使用正确的密钥,就可以还原原始数据。 签名 RSA算法可以用于数字签名,用于验证数据的完整性和真实性。签名过程是将数据使用私钥进行加密,验证过程是将签名使用公钥进行解密。
101 0
C# | 上位机开发新手指南(九)加密算法——RSA
|
4月前
|
算法 搜索推荐 安全
C# | 上位机开发新手指南(八)加密算法——AES
AES——这是在加密算法中相当重要的一种加密方式! 虽然这个世界上已经存在了非对称加密算法(比如RSA、ECC等),但是在对称加密算法中,AES的地位依然相当重要。与非对称加密算法不同,对称加密算法使用的是相同的密钥对数据进行加密和解密,因此其加密和解密速度更快,而且更加高效。而在对称加密算法中,AES是目前最安全、最可靠的加密算法之一,其加密强度和运行效率都非常高。因此,无论是在个人计算机、移动设备,还是在服务器和云计算等领域,AES都被广泛应用于数据的加密和解密过程中。
93 0
C# | 上位机开发新手指南(八)加密算法——AES