(精品论文)播放器的设计与实现毕业论文_第1页
(精品论文)播放器的设计与实现毕业论文_第2页
(精品论文)播放器的设计与实现毕业论文_第3页
(精品论文)播放器的设计与实现毕业论文_第4页
(精品论文)播放器的设计与实现毕业论文_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计(论文) 题题 目:目: 播放器的设计与实现 指导教师:指导教师: 职称职称: 学生姓名:学生姓名: 学号:学号: 专专 业:业: 院院(系系): 完成时间完成时间: 年年 月月 日日 2010 本科毕业设计论文 播放器的设计与实现播放器的设计与实现 摘摘 要要 随着计算机的广泛运用,Internet 的迅速发展,多媒体技术也是迅速发展。各种音频 视频资源在网上随处可见,在人们的日常生活中,几乎不可或缺,于是各种播放器紧跟着 发展起来。本文旨在通过在.net 开发平台上开发一个简单的视频播放器的过程,了解播放 器的功能实现,掌握播放器开发的相关技术,同时利用软件工程的相关理论知识,了解软 件开发的方法与步骤。 首先,本文简单介绍下市场上流行的播放器,比如暴风影音等,然后了解这些播放器 的功能,还有各种播放器播放的特别编码格式文件,分析各种编码格式的优缺点;其次选 择在微软的.net 开发平台上使用 C#语言进行开发,编写出功能简单实用方便的播放器。主 要包括以下几个方面:开发本软件所使用的开发平台与技术;功能模块;功能设计;功能 实现等。最后,对本软件的开发过程进行简要总结,并介绍一下本人的体会和感想。 【关键词关键词】:播放器 ;.NET;DirectX 9.0;C# 2010 本科毕业设计论文 Design and implementation of video player Abstract Along with the computers are widely used, Internet rapid development and the multimedia technology is also developing rapidly. A variety of audio and video resources can be seen everywhere on the Internet, in peoples daily lives, almost indispensable, then all kinds of Player is developed. This paper aim at to understand the functions implementations of Player, to master the development technologies of Player, and use the theory of software engineering to understand the method and step of software develop, by means of the process to develop a simple video player in the development platform of .Net. First of all, this paper introduce some popular players in brief on the market, such as storm video, etc., then to understand some functons of these players, all kinds of special coding format file they can play, to analyze the advantages and disadvantages of various coding formats; second I choose Microsoft .Net development platform and use the C # language to write a function of simple and practical and convenient player. Includeing the following main aspects: the development platform and technology of to develop this player; functional module; function design; function realization, etc. Finally, a brief summary of the software development process and some my experience and feelings are described. 【Keywords】:player;.NET;DirectX;C# 2010 本科毕业设计论文 目目 录录 第一章第一章 概述概述 .3 1.1项目背景与意义.3 1.2市面流行播放器举例简介.3 1.2.1暴风影音3 1.2.2风雷影音5 1.2.3几种常见格式简介6 1.3相关技术及开发工具介绍.7 1.3.1Visual Studio .Net 集成开发环境简介.7 1.3.2C#语言简介8 1.3.3DirectX SDK 9.0 简介.9 第二章第二章 总体功能设计与实现总体功能设计与实现 .11 2.1 功能设计11 2.1.1 功能设计及描述.11 2.1.2 功能模块图.12 2.2 功能实现12 2.2.1 主界面实现.12 2.2.2 文件控制的实现.14 2.2.3 播放控制的实现.15 2.2.4 进度控制的实现.18 2.2.5 声音控制.20 2.2.6 显示控制的实现.21 2.2.7 系统说明.23 第三章第三章 总结总结 .25 致致 谢谢 .26 参考文献参考文献 .27 2010 本科毕业设计论文 第一章 概述 1.1 项目背景与意义项目背景与意义 在 2000 年 1 月,使用媒体播放器(不论是离线播放器还是网络播放器) 的家庭用户是 3320 万,到 2001 年 1 月猛增到 4170 万。在工作中使用媒 体播放器的专业用户数量也较去年同期上升了34.9%,从 2000 年 1 月的 1160 万增加到 2001 年 1 月的 1570 万。而随着计算机的广泛运用, Internet 的迅速发展,多媒体技术也是迅速发展,各种音频视频资源在网上随 处可见,于是播放器在人们的日常生活中,几乎是不可或缺的一部分。现在用 户量更是庞大到不可思议的地步,比之九年前那是云泥之别。 但是现在的播放器一味追求花哨的外观,庞大的功能,比如一些多媒体播 放器在播放网络视频时启动网络加速器,使其他网络用户造成网络堵塞,在目 前网络速度很快的情况下这种损人利己的行为是不对的,也是没必要的。就是 太多这些没必要的功能、花哨的外观等对用户的计算机造成很大的资源浪费, 当用户进行多任务操作时带来很多不便。对于大多数的普通用户来说,很多功 能、外观形同虚设,根本用不上。对于他们,他们的计算机来说,这些都是负 担。 本人作为学习软件工程专业的一员,对软件工程,程序设计等理论知识有 了较深的认识,同事也掌握了一定的软件开发理论,借助这次毕业设计,把这 些理论知识付诸实践,结合上述情况,本人选择了开发一个简单方便易操作的 个人音频视频播放器,能够播放常见的音频视频格式,满足一般用户听歌看电 影的需求。但作为毕业设计,时间紧迫,加之本人没有任何软件开发的经验, 他肯定存在许许多多不足之处,但对它的改善和对自己知识的完备不会随着毕 业设计的结束而终止。 1.2 市面流行播放器举例简介 本小节举例介绍下时下比较常见播放器,比如国产暴风影音、风雷影音等。 比较分析它们的功能,及特有的解码功能等 ;还有再介绍下集中常见的编 码格式以及它们的特点。 1.2.1 暴风影音 暴风影音是暴风网际公司推出的一款视频播放器,该播放器兼容大多数的 视频和音频格式。从 2003 年开始,5 年来,暴风的工程师分析了数以十万 计的视频文件,掌握了超过 500 种视频格式的支持方案。到 2009 年 1 月, 2010 本科毕业设计论文 暴风影音每天使用用户超过 2200 万,暴风影音成功的帮助了超过 1 亿 5000 万的中国互联网用户轻松的观看视频。来自艾瑞的数据显示:截止 2009 年 1 月,暴风影音每天为互联网用户播放超过1.5 亿个/次视频文件; 每天,有 2200 万人点击蓝色的胶片图标,打开暴风影音这款软件;每天, 通过暴风影音播放的视频文件占中国所有互联网视频播放量的50%。暴风 影音已经成为中国最大的互联网视频播放平台。 2008 年 7 月,全新的暴风 影音 2008 第一次涵盖了互联网用户观看视频的所有服务形式,包括:本地 播放、在线直播、在线点播、高清播放等; 软件特色:通过自动侦测用户的电脑硬件配置;自动匹配相应的解码器、 渲染链;自动调整对硬件的支持 。它提供和升级了系统对常见绝大多数影音 文件和流的支持,包括 :RealMedia、QuickTime、MPEG2、MPEG4 (ASP/AVC)、VP3/6/7、Indeo、FLV 等流行视频格式; AC3/DTS/LPCM/AAC/OGG/MPC/APE/FLAC/TTA/WV 等流行音频格式; 3GP/Matroska/MP4/OGM/PMP/XVD 等媒体封装及字幕支持等。暴风影音 采用 NSIS 封装,为标准的 Windows 安装程序,特点是单文件多语种 (目前为简体中文 + 英文),具有稳定灵活的安装、卸载、维护和修复功能, 并对集成的解码器组合进行了尽可能的优化和兼容性调整,适合普通的大多 数以多媒体欣赏或简单制作为主要使用需求的用户 。 在兼容问题上,暴风影音和一些软件部相容,但问题不大,可以解决, 但是要用户自己解决。比如 安装暴风影音后,丽台电视卡无法使用,解决也 很简单,下载安装该电视卡全套的最新版本驱动和电视播放软件即可(注意 仅仅驱动是不行的,一定要包括播放软件 );播放 AVI 的时候画面出错或 CPU 占有率奇高 解决方案:通常是解码器兼容问题 ;等等,虽然有点 麻烦,但可以解决。 从以上简单的介绍可以看出,暴风影音整体还是个很强大,很好用的播 放器。单个人看来,它仍然有一些问题。暴风影音截止到现在版本已经升级 很多次了,几乎每次升级都添加了新功能,优化了某些功能,修正个别 bug,到现在暴风能播放几百种格式的媒体文件,功能庞大。这些看似很好, 但是对于一般用户来说看电影听音乐看网上视频能使用几种格式的文件,甚 至有部分用户不能上网,对于这些用户来说绝大部分的功能是白费了,浪费 资源而已。 1.2.2 风雷影音 功能特色:独创双播放内核,更快速、更清晰、更流畅 ,国内首家独创 真正双播放内核影音播放器,聚合MPlayer 和 MPC 强大优势功能,实现 快速解码,挑战最快 播放极限,播放影片更快速、更清晰、更流畅 ;全面支持高清影片播放 (无 2010 本科毕业设计论文 需安装第三方软件 ),从 2.1 版本起,全面支持高清影片播放,且无需另外 安装第三方软件,全面支持 HD-DVD/BD-DVD、VC-1、EAC3、EVO、TS 、TP、MKV 等高清格式影片 ;独创高清智能连接技术、 VC-1 智能桥接技 术、启用显卡硬解功能,充分发挥显卡硬解MPEG2,让高清播放更流畅 ;播放 206 种影音格式;多分层过滤解码,全面提升影片兼容播放 ,在双 播放内核的基础上采用多分层过滤解码,保证不同格式不同编码的影片都能 找到对应的分离器和解码器并顺畅播放,大大提升了影片播放的兼容性; 智能连续剧播放 ,智能连续剧识别,无需多次选择播放连续剧影片,自动连 续剧播放,让您不间断欣赏影片更顺畅、更舒心 ;跳过连续剧片头 /片尾, 在播放连续剧影片时,可以通过按 F9/F10 来设置跳过连续剧的片头 /片 尾,让剧情播放无缝连接 ,等等。 从上述功能(并不完全,只是介绍一下特色功能)可以看出,风雷影音 也是个很不错的播放器,特别是其在双播放内核、高清影音上别具特色。但 是对于部分在网上看视频的用户来说有一点缺陷,它不支持在线播放(只 提供对 firefox 浏览器进行常见流格式的在线播放支持插件 ) 。 1.2.3 几种常见格式简介 MPEGMPEG 格式:格式:它的英文全称为 Moving Picture Expert Group,即运动图像 专家组格式,家里常看的 VCD、SVCD、DVD 就是这种格式。MPEG 文件格式是运 动图像压缩算法的国际标准,它采用了有损压缩方法减少运动图像中的冗余信 息,说的更加明白一点就是 MPEG 的压缩方法依据是相邻两幅画面绝大多数是相 同的,把后续图像中和前面图像有冗余的部分去除,从而达到压缩的目的(其最 大压缩比可达到 200:1)。目前 MPEG 格式有三个压缩标准,分别是 MPEG1、MPEG2、和 MPEG4。 AVI 格格式式:音频视频交错 (Audio Video Interleaved)的英文缩写。 AVI 这个由微软公司发表的视频格式在视频领域已经存在好几个年头了。AVI 格式调用方便、图像质量好,但缺点就是文件体积过于庞大,压缩标准不统 一。 RMRM 格式:格式:Networks 公司所制定的音频视频压缩规范称之为 Real Media, 用户可以使用 RealPlayer 或 RealOne Player 对符合 RealMedia 技术规范的网 络音频/视频资源进行实况转播,并且 RealMedia 还可以根据不同的网络传输速 率制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送 和播放。这种格式的另一个特点是用户使用 RealPlayer 或 RealOne Player 播 放器可以在不下载音频/视频内容的条件下实现在线播放。 RMVBRMVB 格式:格式:这是一种由 RM 视频格式升级延伸出的新视频格式,它的先进 之处在于 RMVB 视频格式打破了原先 RM 格式那种平均压缩采样的方式,在保证 平均压缩比的基础上合理利用比特率资源,就是说静止和动作场面少的画面场 2010 本科毕业设计论文 景采用较低的编码速率,这样可以留出更多的带宽空间,而这些带宽会在出现 快速运动的画面场景时被利用。这样在保证了静止画面质量的前提下,大幅地 提高了运动图像的画面质量,从而图像质量和文件大小之间就达到了微妙的平 衡 W WM MV V 格格式式:一种独立于编码方式的在 Internet 上实时传播多媒体的技术 标准,Microsoft 公司希望用其取代 QuickTime 之类的技术标准以及 WAV、AVI 之类的文件扩展名。 WMV 的主要优点在于:可扩充的媒体类型、 本地或网络回放、可伸缩的媒体类型、流的优先级化、多语言支持、扩展性 等。 W WM MA A 格格式式:WMA 的全称是 Windows Media Audio,是微软力推的一种 音 频格式。WMA 格式是以减少数据流量但保持音质的方法来达到更高的压缩率 目的,其压缩率一般可以达到 1:18,生成的文件大小只有相应 MP3 文件的 一半。这对只装配 32M 的机型来说是相当重要的,支持了WMA 和 RA 格式, 意味着 32M 的空间在无形中扩大了 2 倍。此外, WMA 还可以通过 DRM(Digital Rights Management)方案加入防止拷贝,或者加入限制播放 时间和播放次数,甚至是播放机器的限制,可有力地防止盗版。 MP3MP3 格式:格式: MP3 具有不错的压缩比,使用 LAME 编码的中高码率的 mp3,听 感上已经非常接近源 WAV 文件。使用合适的参数,LAME 编码的 MP3 很适合于音 乐欣赏。由于 MP3 推出年代已久,加之不错的音质及压缩比,不少游戏也使用 mp3 作事件音效和背景音乐。几乎所有著名的音频编辑软件也提供了对 MP3 的 支持,可以将 mp3 像 wav 一样使用,但由于 mp3 编码是有损的,因此多次编辑 后,音质会急剧下降,mp3 并不适合保存素材,但作为作品的 demo 确实相当优 秀的。mp3 长远的历史和不错的音质,使之成为应用最广的有损编码之一,网 络上可以找到大量的 mp3 资源,mp3player 日渐成为一种时尚。不少 VCD Player、DVD Player 甚至手机都可以播放 mp3,mp3 是被支持的最好的编码之 一。MP3 也并非完美,在较低码率下表现不好。MP3 也具有流媒体的基本特征, 可以做到在线播放。 其音质好,压缩比比较高,被大量软件和硬件支持,应用 广泛。适用于比较高要求的音乐欣赏。 1.3 相关技术及开发工具介绍 本系统采用面向对象的软件开发办法,以 Microsoft 公司的可视化集成开 发环境 Visual Studio .Net 作为开发平台,以 C#作为开发语言实现预定的需 求功能。 1.3.1 Visual Studio .Net 集成开发环境简介 .Net 是 Microsoft XML Web services 平台。.Net 平台为创建新一代分布 2010 本科毕业设计论文 式 Web 应用提供了所有的工具和技术(表示技术、构件技术和数据库技术) 。 它支持标准的 Internet 协议,包括 HTTP 协议、XML(可扩展标记语言)和 SOAP(简单对象访问协议) ,从而实现了异构系统间应用程序的集成和通信。 .Net 平台包括 5 个主要部分: Windows .Net .Net 企业级服务器 .Net Web 服务构件 .Net Framework Visual Studio .Net Visual Studio .Net 是为建立基于.Net Framework 应用程序而设的一个 可视化集成开发环境(Integrated Development Enviroment,IDE) 。它提供了 更优秀的多种编译语言的编辑和编译统一的开发平台,他是一个快速开发企业 级 Web 应用程序以及高性能桌面应用的工具。它为所有的编程语言提供了简单 统一的代码编辑器,包括 XML 编辑器、HTML 编辑器、SQL Server 接口、以图形 化的方法设计服务器构件的设计器、监控远程机器的 Server Explorer。可以 说,VisualStdio .Net 集中了建立分布式应用所需的功能。使用此集成开发工 具而不是用 SDK 编辑 C#程序有以下主要原因: IDE 支持首行缩进,切 c#程序的关键字等可用不同的颜色直观表示,以 便检查。 IDE 的语法导航功能可实现动态查找、提示编辑工程中的错误。 便于开发 Windows 应用程序。可以像 Visual Basic 一样直接拖放控件 来“绘制”Windows 窗体。 结合我要编写的程序播放器可知使用此集成开发环境更方便高效。 1.3.2 C#语言简介 C#是一种现代的、面向对象的语言,它结合了 C/C+和 Visual C+的强大 功能以及 Visual Basic 的简单易用性。C#有以下新特性: 简单。C#做了些该进,使语言更简单。 面向对象。C#支持面向对象的三种编程原则:封装、继承和多态。 类型安全。C#去掉了指针,从根本上保证了程序的稳定性和类型安全。 版本控制。C#实现了版本技术,避免了“DLL 灾难” 。 兼容性。C#允许在遵守.Net Framework CLS 的条件下访问不同的 API,可以与 Windows 的几种传统服务交互。 灵活性。C#允许声明一些不安全的方法和类,从而使用指针、结构和 静态数组。 总之,C#是一种安全的、稳定的、简单的、优雅的,由C 和 C+衍生 2010 本科毕业设计论文 出来的面向对象的编程语言。它在继承C 和 C+强大功能的同时去掉了一 些它们的复杂特性(例如没有宏和模版,不允许多重继承) 。C#综合了 VB 简单的可视化操作和 C+的高运行效率,以其强大的操作能力、优雅的语法 风格、创新的语言特性和便捷的面向组件编程的支持成为.NET 开发的首选 语言。 1.3.3 DirectX SDK 9.0 简介 Direct X 其实是微软公司推出的一个为 Windows 平台的多媒体 API 函数库, 它提供标准接口来与显卡和声卡、输入设备等进行交互。它可以让 windows 为 平台的游戏或多媒体程序获得更高的执行效率,加强3d 图形和声音效果, 并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的 硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。如果没 有这组标准 API 函数库,那你就需要为每一种显卡、声卡的每个组合和每种类 型的键盘、鼠标和游戏杆编写不同的代码。DirectX 从具体的硬件中抽象出来, 并且将一组通用指令转换成硬件的具体命令。这样开发语言通过调用统一标准 的 Direct X 函数库就可以操作每一种显卡、声卡的每个组合和每种类型的键盘、 鼠标和游戏杆等多媒体了。 Direct X SDK 9.0 安装及类库介绍:.net Framework SDK 中并没有包含 Direct X SDK,所以为了顺利的完成本文后面介绍,必须先下载、安装 Direct X SDK。安装完 Direct X 后,就会在存在“C:WINDOWSMicrosoft.NETManaged DirectX“这样一个目录,此目录中目录中应该有九个 DLL 文件和九个 XML 文件。 九个 DLL 文件大致对应于 DirectX 中的十个命名空间。编程中就是使用其中的 命名空间来提供对输入设备、声音、网络播放、图形等的支持。而开发本播放 器的程序中只使用了命名空间“Microsoft.DirectX.AudioVideoPlayback”和 “Microsoft.DirectX.DirectSound”。Microsoft.DirectX.AudioVideoPlayback 命名空间主要就是支持播放音频和视频文件。 Microsoft.DirectX.AudioVideoPlayback 命名空间中定义了三个类: “Audio“、“Video“和“TextureRenderEventArgs“。其中前两个类是最常用的, 分别用来支持音频和视频。本软件开发使用的也是前两个类。 下表就是本程序使用的 Microsoft.DirectX.AudioVideoPlayback 命名空间 中定义的属性及其具体的作用: 属性描述 Audio 获取视频文件中的音频对象,可用来后续的音频播放 Caption获取或设置在 Form 上播放视频的名称 CurrentPosition获取或设置播放视频的当前位置 2010 本科毕业设计论文 DefaultSize获取播放视频的缺省的视频大小 Fullscreen 获取或设置视频文件是否在全屏模式下播放 Owner 获取或设置视频播放的宿主组件 Paused获取当前的播放状态是否处于暂停状态 Playing获取当前的播放状态是否处于播放状态. Size获取或设置播放视频的大小 State获取当前的播放状态 Stopped 获取当前的播放状态是否处于停止状态 StopPosition获取播放的视频的停止播放位置 表一 下表是本程序使用的 Microsoft.DirectX.AudioVideoPlayback 命名空间中定 义的方法及其具体的作用: 方法描述 Open 装入新的文件到 Video 对象中 Pause设置为暂停播放状态. Play设置为播放状态 SeekCurrentPosition搜索转入到制定的播放位置 SeekStopPosition设置一个新的停止位置 Stop设置为停止播放状态 Video初始化一个新的 Video 实例 表二 Microsoft.DirectX.DirectSound 命名空间主要提供对声音的支持。在这个命 名空间中我们只使用了 SecondaryBuffer 类,此类包含用于管理起支持作用的 声音缓冲器的方法和属性。 了解了以上和本程序有关的基础知识及开发本程序锁使用的有关技术后,下面开始介 绍本程序的具体功能和实现方法。 2010 本科毕业设计论文 第二章 总体功能设计与实现 在第一章中分析了播放器的功能需求及常见的视频音频编码格式,还有编 写本程序使用的技术、工具等。那么从本章开始介绍本程序的功能设计与实现, 本文将使用第一章中的技术等从功能设计、功能实现两方面重点介绍。 2.1 功能设计 参考上一章中介绍的播放器的功能,对其功能进行整理筛选,去掉那些华而不实或基 本无用的功能,保留最实用最常用的功能,整合编写成本播放器。下面开始主要介绍本播 放器的功能设计及描述、功能模块图等。 2.1.1 功能设计及描述 本播放器的主要任务和目的是播放一些常见的音频视频格式文件,达到功 能简洁方便,消耗资源少而又不影响日常娱乐的需求。其主要划分为下面六个 功能模块,每个功能模块的作用描述如下: 文件控制;主要用于打开播放文件,本程序支持的格式主要是 rmvb、rm、avi、mpeg(mpg) 、wmv 视频格式和 MP3、wma、wav 音 频格式,还有管理播放列表:建立或删除播放列表。 播放控制;控制视频或音频的播放状态。播放状态有播放、暂停、停止 三种状态。还有切换视频(音频) ,就是播放当前视频(音频)的前一 个视频(音频)或后一个视频(音频) 。播放过的视频(音频)按播放 顺序自动显示在当前默认的播放列表中,默认的播放列表对播放过的记 录不进行保存,就是在关闭、重启播放器后以前的播放记录被清空。 进度控制;显示当前视频(音频)的总长度和已播放的长度,可以使用 鼠标拖放进度条,跳跃式快速播放。显示是通过时间和进度条两方面同 步显示的。 声音控制;调整音量的大小,显示是否静音;调整声音的声道为左声道、 右声道或正常。 显示控制;若播放的是视频文件则显示图像,可以调整屏幕是否为全屏, 是否铺满屏幕或按原始比例播放,也可以使用鼠标拖动调整屏幕大小, 本播放器对屏幕有最小范围规定(非最小化) ,就是小到一定程度时屏 幕不能再缩小。最大屏幕为最大化(全屏除外) 。 系统说明;关于()说明,提示说明本播放器的一些信息,比如 播放器能播放的格式,播放器的开发人开发时间等。 2010 本科毕业设计论文 2.1.2 功能模块图 其具体功能模块图如下: 2.2 功能实现 2.2.1 主界面实现 本节主要讲述如何根据上述的功能模块图实现具体的功能。 下图一为本播放器的原始界面,由 Visual Studio 中已安装模板 Windows 应 用窗体程序(winform)生成,所用的控件、组件、容器、菜单、工具栏、对话 框等都是有 Winform 提供(如果所要使用的控件等没有提供,则需个人编写) 。 其中图片可以自己绘制,组件、控件等可用自己编写代码做成最适合自己要求 的,这样做出来的东西色彩比较统一,界面比较美观大方,但那样做相当的麻 烦,特别是编写新的组件、控件等有很多困难。编写本程序由于时间有限,图 播放器 声音控制 播放控制 进度控制 文件控制 显示控制 系统说明 打开文件 播放列表 播放 / 暂停 停止 上 / 下一个 拖动调整 显示进度 音量调整 声道调整 显示图像 调整屏幕 关于 左声道 右声道 正常 全屏 拖动调整 2010 本科毕业设计论文 片是下载的,所以在美观上有所欠缺。以后如有时间,另行绘制。由于界面是 控件、组件等拖放组成,大部分代码有窗体设计器自动生成,需个人改动的并 不多,所用这部分就不详细说明了,只把主窗体 MainForm 的代码示下。 图一 / MainForm this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.BackColor = System.Drawing.Color.Black; this.ClientSize = new System.Drawing.Size(555, 373); this.Controls.Add(this.playListBox); this.Controls.Add(this.controlPanel); this.Controls.Add(this.playScreen); this.Controls.Add(this.menuStrip); this.Icon = (System.Drawing.Icon)(resources.GetObject(“$this.Icon“); this.MainMenuStrip = this.menuStrip; this.MinimumSize = new System.Drawing.Size(560, 389); this.Name = “MainForm“; this.Text = “久久影音“; this.Resize += new System.EventHandler(this.MainFormResize); this.menuStrip.ResumeLayout(false); this.menuStrip.PerformLayout(); this.controlPanel.ResumeLayout(false); this.controlPanel.PerformLayout(); 2010 本科毕业设计论文 (System.ComponentModel.ISupportInitialize)(this.pauseButton).EndInit(); (System.ComponentModel.ISupportInitialize)(this.pictureBoxCenter).EndInit(); (System.ComponentModel.ISupportInitialize)(this.pictureBoxRight).EndInit(); (System.ComponentModel.ISupportInitialize)(this.pictureBoxLeft).EndInit(); (System.ComponentModel.ISupportInitialize)(this.pictureBoxFill).EndInit(); (System.ComponentModel.ISupportInitialize)(this.movieTrack).EndInit(); this.ResumeLayout(false); this.PerformLayout(); 2.2.2 文件控制的实现 打开文件的功能是许多应用程序的一个常见任务。Windows Forms 命名空 间包含了一组常用对话框,支持这些类型的活动。在本程序中我们使用的是 OpenFileDialog 类,OpenFileDialog 类表示常用的文件对话框,用于从磁盘上加 载一个或多个文件,是用于打开现有文件的标准类。Filter 属性定义了这个对话 框可用看到的文件类型列表,本程序中它来显示可用播放的文件列表。部分实 现代码如下: OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = “Movies (*.avi, *.mpg(mpeg), *.wmv,*.rmvb,*.rm,*.mp3,*.wma) |*.avi;*.mpg;*.wmv;*.rmvb;*.rm;*.mp3;*.wma|All files (*.*)|*.*“; dlg.InitialDirectory = “C:“; dlg.RestoreDirectory = false; dlg.Title = “打开“; if (dlg.ShowDialog() = DialogResult.OK) /如果存在已播放的Video,释放它 if(MyVideo != null ) MyVideo.Dispose(); PlayTheMovie(dlg.FileName); Windows 窗体 ListView 控件显示了带图标的项的列表。可使用列表视图 创建类似于 Windows 资源管理器右窗格的用户界面。该控件有四种视图模式, “LargeIcon”、 “SmallIcon”、 “List”和“Details”。本播放器的播放列表就是使 用 ListView 控件建立,使用的是列表视图模式(List 模式)显示小图标,总 是显示在单列中。见下图二。 当播放视频(音频)时,视频(音频)会自动显示在默认的播放列表中, 代码如下,这行代码出现在播放函数中: playListView.Items.Add(theMovieName); 创建播放列表其实就是创建一个包含想要播放的视频(音频)名称的文件, 然后在这个文件中添加或删除视频(音频),这里使用的是 File 类中 Create 2010 本科毕业设计论文 方法。其部分代码如下: string path = “c:久久影音MyPlayList.txt“; if (File.Exists(path) File.Delete(path); using (FileStream fs = File.Create(path) Byte info = new UTF8Encoding(true).GetBytes(“This is some text in the file.“); 图二 2.2.3 播放控制的实现 播放才是一个播放器最重要的功能。由上章可知 Microsoft.DirectX.AudioVideoPlayback 命名空间中定义的属性和方法为这块功能 的实现提供了很大的便利,比如播放、暂停、停止函数都有提供,详见上一章 表一表二。但是在调用这些函数之前还有很多工作需要做。参照下面播放函数 PlayTheMovie(string theMovie)部分代码进行分析: string theMovieName = theMoive; initialClientWidth = this.ClientSize.Width; /获取窗体工作区的宽度 VideoDefaultSize = MyVideo.DefaultSize; /获取Video的缺省的视频大小 int width = Math.Max(VideoDefaultSize.Width, initialClientWidth); /获取 Video的缺省的宽度和窗体工作区的 宽度较大的一个值 int height = VideoDefaultSize.Height; /获取 Video 的缺省的高度 2010 本科毕业设计论文 /重新设置播放视频的视频大小 if (width = 800) width = (int)(width * 0.55f); height = (int)(height * 0.55f); this.ClientSize = new Size(width, height + menuStrip.Height + controlPanel.Height); MyVideo.Owner = this.playScreen; 上面的代码其实就是重新设置视频和初始播放窗口的大小。刚启动播放器 时播放窗口(整个播放器界面)是固定大小的(见图一),但加载视频以后,播 放窗口的大小被设置为和视频的缺省值(MyVideo.DefaultSize)一样。经过 DirectX解码后的视频缺省和播放窗口(Owner)的大小并不一样大,有的比播 放窗口小,大部分比播放窗口大,甚至比播放窗口大的多,这时需要对视频大 小进行调整,按正常比例缩放适应在设置好的播放窗口。 在本程序中,当加载视频后,获取视频缺省值的大小(宽和高)和播放窗 口的宽度,然后比较并获取视频缺省的宽度和播放窗口宽度中较大的一个 (width),大部分情况下是视频的缺省宽度比较大,再把播放窗口的大小初始 化为视频缺省高度(height)和width的0.55倍。这个倍率比较合适,使播放屏 幕不至太大或太小。见图二、图三。 有了合适的播放屏幕还不完整,因为此时播放屏幕还不能任意调整大小, 视频也不一定显示在播放屏幕的中间。下面的mainFormResize事件调用就是解 决这个问题的,详见显示控制模块中屏幕调整功能实现。下面这几行代码的作 用就是在上面设置好的播放窗口中把视频显示在播放屏幕的中间,并在播放器 的顶端显示视频的名称及视频格式。见图二、图三、图四的顶端显示。 If (playListView.Visible = true) mainFormResize(null, null); else MainFormResize(null, null); int LastIndex = theMovieName.LastIndexOf(”); theMovieName = theMovieName.Substring(LastIndex + 1, (theMovieName.Length LastIndex 1); this.Text = theMovieName; 在播放视频(音频)过程中,我们都期望能看到视频的总长度以及已经播 放的长度。本程序中我们是使用movieTimer组件计时的。视频的总长度是死的, 我们只需调用Video的属性Duration即可知道视频的总长度,然后把其转换为 string格式显示即可。见图二。代码如下: /显示视频的总长度(总时间) MovieDuration = (int)MyVideo.Duration; 2010 本科毕业设计论文 hours = MovieDuration / 3600; minutes = (MovieDuration - hours * 3600) / 60; seconds = (MovieDuration - hours * 3600 - minutes * 60); string hHour = (“00“ + hours.ToString(); hHour = hHour.Substring(hHour.Length -2, 2); string mMinute = (“00“ + minutes.ToString(); mMinute = mMinute.Substring(mMinute.Length - 2, 2); string sSecond = (“00“ + seconds.ToString(); sSecond = sSecond.Substring(sSecond.Length - 2, 2); movieDuration = hHour + “:“ + mMinute + “:“ + sSecond; totalTime.Text = “/“ + movieDuration; MyVideo.Play(); movieTimerEnabled = true; movieTimer.Start(); movieTrack.Value = 0; pauseButton.Visible = false; playListView.Items.Add(theMovieName); 上面几行代码则是调用函数,开始播放、计时,进度条开始移动,并把视 频名称添加到播放列表里。 视频的总长度很好计算、显示,但是视频当前长的需要另行计算。视频当 前长度的计算、显示和总长度的计算、显示很相似,只是调用的属性不同而已。 这里我们调用的是 CurrentPosition 属性,此属性是用来获取活设置播放的当 前位置。另外视频的当前长度和进度条也是同步显示,这部分功能则需要另外 算法。先获取视频的总长度;然后获取视频的总长部和进度条长度 (movieTrack.Maximum)的比值,表示进度条单位长度上的视频长度;再用当 前视频长度比上这个比值就得到当前视频长度对应的进度条长度,把其赋值给 Value 显示出即可。分代码如下: float calibrationTime; MovieDuration = (int)MyVideo.Duration; calibrationTime = (float)(float)MovieDuration / (float)movieTrack.Maximum); MovieCurrentPosition = (int)MyVideo.CurrentPosition; movieTrack.Value = (int)(MovieCurrentPosition / calibrationTime); 至于播放、暂停、停止功能则很容易实现,这些功能实现所使用的函数在 Microsoft.DirectX.AudioVideoPlayback 命名空间中都有提供,详细情况请参 看上一章。 在本程序中,这三个功能分别有三个按钮,其中播放、暂停按钮是重叠在 一起的,当视频处在其中一个状态时,另一个状态的按钮就隐藏不显示。见图 二、图三下面按钮区。这三个功能分别是使用三个Button事件实现的:对于播 放、暂停功能先判断视频是否为空,为空则各功能按钮不可交互(Enabled;鼠 标点击无反应),不为空时若点击暂停按钮时,触发播放事件,终止暂停开始 2010 本科毕业设计论文 播放,显示播放按钮标志,若点击播放按钮时触发暂停事件终止暂停开始暂停, 显示暂停按钮;对于停止功能则先判断视频是否为空,为空各功能按钮不可交 互,不为空则判断视频是否处于停止状态,若停止状态(Stopped)停止按钮不 可交互,非停止状态才可点击停止按钮,触发停止事件,调用停止函数 (Stop()。 这部分功能在菜单项中“播放”的下拉菜单中也有实现,实现方式很相似, 只是播放、暂停功能实现多了一道步骤:先判断视频的状态,播放(Playing) 还是暂停(Paused)状态,然后才是根据不同状态调用不同函数。这部分功能 亦设有快捷键,暂停/播放的快捷键是Alt+空格键,停止的快捷键是Ctrl+S。 下面只举一个暂停功能实现的代码例子(这是点击播放按钮时执行的代码) ,其部分代码如下: if (MyVideo != null) pauseButton.Enabled = true; playButton.Enabled = false; MyVideo.Pause(); pauseButton.Visible = true; playButton.Visible = false; 至于实现播放当前视频的上一个下一个视频已不难。先判断当前视频在其 所在的播放列表里是否第一个或最后一个,若是第一个则不能播放其上一个, 若是最后一个则不能播放其下一个,否则把当前

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论