




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
太原理工大学毕业设计(论文)用纸基于android的视频播放器的设计与实现摘要现今,随着基于Android操作系统的智能手机的广泛应用,视频播放器已成为智能手机的一个必不可少的程序,广大用户迫切需要一个贴近用户、方便用户、个性化的视频播放器。因此,设计一个基于Android手机的多功能播放器,具有重要的实际意义。遵循软件工程规范,文中主要介绍了基于android的多功能视频播放器的设计和实现过程,实现了手机中视频文件的过滤读取、存储、播放、收藏等功能。本次毕业设计主要使用JDK + Eclipse + Android-SDK-Windows工具进行开发,使用的编程语言是Java语言。该程序主要由4个不同Activity来实现,每个Activity实现相应的功能模块,能够有效满足Android手机用户在视频播放中的常见需求。本论文详细介绍了播放器程序的设计思路、设计方案、系统结构和项目工程结构,对系统的可行性与需求性进行了详细的分析,阐述了系统各个模块功能的设计与实现。对程序主要的Activity都进行了详细的介绍和分析,包括对其使用的布局文件的具体介绍,以及各个控件的作用。在最后进行了程序测试,对每一个实现的模块功能都做了测试,并且记录了大量截图用来展示测试结果,以观察程序应有的功能是否正常运行,以及发现程序中可能存在的问题。所开发的程序界面比较友好,操作相对容易,达到设计要求。关键词:安卓;视频播放;Activity;Mediaplayer全套设计加扣 3012250582TheDesignandImplementationofVideoPlayerBasedonAndroidABSTRACTNow,withthewideapplicationofsmartphonebasedontheAndroidoperatingsystem,videoplayerhasbecometheessentialapplicationofsmartphone.Mostofconsumersurgentlyrequireapersonalizedvideoplayerwhichisclosetouserandfacilitateuser.Therefore,thedesignofamultifunctionalplayerbasedonandroidmobilephoneshasanimportantpracticalsignificance.Followingthespecificationofsoftwareengineering,thepapermainlyintroducesthedesignandimplementationprocessofthemulti-functionalvideoplayerbasedonandroidandrealizesthecellphonevideofilesinthefilteringread,storage,broadcast,collection.TheprojectdesignisdevelopedbyusingJDK,Eclipse,andAndroid-SDK-Windowstools.TheprogramminglanguageisJava.TheprogramconsistsoffourdifferentActivitiesandeachActivityachievesthecorrespondingfunctionalmoduleswhichcaneffectivelysatisfythecommonrequirementsforplayingvideoonAndroidmobilephones.Thispaperintroducedthedesignideas,designscheme,systemarchitectureandprojectengineeringstructuresofvideoplayer.Thefeasibilityandrequirementsofsystemwereanalyzedindetail.Thesystemfunctionandeachmodulewereexplained.ThemainActivityoftheprogramaredescribedandanalyzedindetailincludingtheusinglayoutfile,aswellastheroleofeachcontrol.Finally,Imadethetestfortheprogramincludingthefunctionsofeachimplementedmodules.Inordertoobservewhethertheprogramshouldfunctionproperlyandfindtheproblemsthatmayexistintheprogram,manyscreenshotsweresavedtodemonstratethetestresults.Thedevelopedprogramhasafriendlyinterfaceandcanbeoperatedrelativelyeasy,whichhasachievedthedesignrequirement.Key words:Android;VideoPlay;Activity;Mediaplayer目录摘要iABSTRACTii1 绪论11.1 课题的来源及意义11.2 国内外研究状况21.2.1 国内外发展现状21.2.2 发展中存在的问题21.3 项目的主要工作和解决的问题32 Android相关技术介绍及环境搭建42.1 Android介绍42.2 Android开发平台53 系统分析及系统结构设计与实现93.1 系统分析93.1.1 系统可行性分析93.1.2 系统需求分析93.2 系统结构设计93.3 系统设计的目标及基本思路133.4 Android视频播放器相关技术133.4.1 Mediaplayer视频技术133.4.2 Surface、SurfaceView、SurfaceHolder三者之间的关系164 软件设计184.1 软件布局设计184.2 扫描SD卡上的视频文件194.3 播放控制功能的设计195 测试215.1 测试环境和条件215.2 测试215.3 测试结果分析25结论27参考文献28致谢29iv1 绪论1.1 课题的来源及意义在这个信息化的时代,IT业已经成为世界发展的主流,我们对信息技术的依赖远远超过了对我们自己的依赖,计算机和手机已经成为我们日常生活中不可缺少的获得信息的渠道。正因为如此,各种各样的软件层出不穷,我们的生活也因为各种各样的软件变的更有滋有味。不缺乏娱乐性,也不缺乏教育意义,让我们从这些软件中受益匪浅,使我们看到了相比以前的巨大进步。同时,随着科技的发展,计算机越来越精致,手机也越来越智能化,所以我们的依赖性也越来越大,越来越离不开这些给我们提供日常信息的工具。手机也已不再仅仅是简单的人与人通话的工具,而是在很大程度上成为了我们获取信息的一个更好的渠道。一个好的软件,能够标志一个手机品牌的地位。所以,开发一款好的手机软件是相当必要的。以前我们看电影,看视频,都要去电影院或者是影吧,而且时间有限,很不方便;而现在是在电脑上或者手机上看视频,看小说,文档等等。以此看来,一个好的手机视频播放器软件的开发是相当有必要的。作为集通讯与娱乐消费为一体的智能手机,播放器是其中一个必不可少的重要功能,一个贴近用户,方便用户的多功能的播放器也是用户所渴望的,更是开发人员应当致力于的。随着Google推出的Android手机的不断更新换代,技术方面也日趋成熟,一个良好的视频播放器的设计与实现已经成为可能。目前,作为Android的手机用户而言,都有视频播放器的实体应用。但是,对于绝大多少而言,其界面单调,功能单一。比如,界面与其他非智能的手机没有大的区别,而功能上面,也就除了基本的播放控制流程之外,多上一个视频基本信息的显示,同时加上一个对预设定路径的播放列表的展示。因此,开发一款界面友好、炫丽、功能更多的视频播放器,更好的贴近用户,满足用户需求,其应用前景也是相当乐观的。Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由AndyRubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2012年11月数据显示,Android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。由此可见,Android占有非常可观的市场前景。具有开源特性的Android平台打破了之前Symbian、Windowsmobile等操作系统收取高额授权费用的模式,使得智能手机成本大大的降低。而正是由于它开放源代码,使得手机产生更多个性化的应用。同时,合作方能够在这里得到利润或者创造价值,手机软件行业得到维护协调发展。以Google、苹果和诺基亚为中心各自形成的生态链将以原来数倍的速度推动移动互联网的发展,这正是Google发布Android平台的意义,也是Android平台存在的使命所在。作为Android平台成员之一的中国移动也投资成立了一家通讯公司,专门从事Google手机软件的应用以及本地化的软件的开发,比如将在Google手机平台上添加飞信、输入法等一系列符合国内用户使用特色的功能。国内众多企业也将眼光投入到Android上面,并启动了相关的计划来深入的理解并发展Android。更多的手机软件开发企业已经或者筹备着将公司进行转型,从其他方向的开发转向到Android的开发。由此可见,无论是在国内还是在国外,Android平台对手机软件行业和移动手机平台将发挥极大地推动作用,而在未来的几年时间里,Android将越发的凸显自己的重要性。1.2 国内外研究状况1.2.1 国内外发展现状在国外的发展,自google公司宣布android系统上市以来,在短短几年间的到了飞速的发展。在国外已经有很多已经非常成熟的技术进行基于android平台下的软件开发。短短几年间,成千上万的基于android系统的应用发布在安卓市场上,加上android系统的开源性,使得他在国外的到了广大学者的深爱,各大厂商也纷纷加入到使用android系统的行列。在国内的发展,android自09年进入中国市场以来,也得到了飞速的发展,大到成百上千人的大公司,小到几个人的个体公司都在使用android系统进行软件开发。但是虽然在国内发展迅速,学习资源也很丰富,但是基本上都是良莠不齐,绝大部分是翻译自国外的一些学习资料而来。这样给我们国内的学者学习带来了一些困扰,在着一些高科技术的发展上,国内还需要进一步加强。目前国内的Android开发还是主要以应用开发为主,主要分成3类:为企业开发应用、开发通用应用(放到AndroidMarket或者其他AppMarket销售)以及游戏开发(放到AndroidMarket或者其他AppMarket销售)。第一类开发者一般身处规模较大的公司,这些公司主要为自有品牌或者其他品牌设计手机或者平板电脑的总体方案。除了根据需求对系统进行定制外,更多的工作在于为这些系统编写定制的应用。第二类开发者,一般处于创业型公司或者是独立开发者,他们的盈利方式主要是2种:为国外公司进行外包开发,或者通过Google的移动广告(AdMob)通过广告点击分成。而理论上的通过付费下载的形式来盈利的,现在国内鲜见成功者。第三类开发者,目前和第二类开发者类似。1.2.2 发展中存在的问题Android 在快速增长的同时,也面临着多种问题,其中最显著的,就是越来越突出的版本分裂问题。2011 年 10 月 Android 4.0 的推出曾经为最终解决分裂问题带来了一线希望,4.0 版本的 Android 体验良好,界面美观,对平板和手机界面都有着不错的兼容性,而 Google 自己也有意从 4.0 开始收紧各大手机制造商的定制权。然而到目前为止 4.0 版本的推出并未有效改善 Android 的版本分裂问题,反而使这一问题愈演愈烈。根据 Google 发布的统计,截至 2012 年 5 月初,在所有访问 Google Play 应用市场的设备中,Android 4.0 的份额只有4.9%,而 Android 2.3 依然拥有高达 64.4% 的份额,甚至早已过时的 Android 2.2 所拥有的份额也大大高于 4.0 达到 20.9%。也就是说,虽然从 Android 4.0 发布到现在已经过去了六个月,这个被寄予厚望的新版本却还根本没有壮大起来。这里面存在很多种原因:旧有设备升级不力。很多硬件制造商在旧设备的升级问题上动作缓慢。比如 HTC 针对旧设备的大规模升级工作刚刚开始,而三星则为可升级的旧设备设置了很高的门槛,Galaxy S 等配置上没有问题的设备都被排除在升级队列之外。此外,最大的第三方系统 CyanogenMod 的 4.0 定制版本迟迟不能正式推出,也更加加剧了这一现象。新设备推出缓慢。从 2011 年 10 月第一部 Android 4.0 设备 Galaxy Nexus 的推出到 2012 年 2月 MWC 大会时大批出现 Android 4.0 设备,中间的四个月里几乎没有搭载 Android 4.0 的手机推出。而即使到现在为止搭载 Android 4.0 系统的新设备数量依然很不足。缺乏运营商定制渠道。运营商定制机渠道在 3G 时代显得十分重要。而目前全球范围内各大运营商的定制机型依然鲜有 Android 4.0 设备。以北美为例,在三星 Galaxy Note 预装 4.0 系统发售之前 AT&T 长期无法提供任何带有 4.0 系统的合约机,而 Verizon 则在很长时间里只能提供 Galaxy Nexus 一款可靠的 4.0 设备。低端机型无法达到配置要求。Android 4.0 的配置要求比起前代的 Android 系统来说有较大的提高,导致各大厂商在中低端市场的很多新机型和主推机型无法达到最低配置要求。因此只能继续采用 2.3 系统以保证较为流畅的用户体验。Android 的分裂现状对 Google、手机制造商、运营商、开发者和用户都带来了很多问题,而这些问题,为 Android 的竞争对手们蚕食其市场份额打开了大门。1.3 项目的主要工作和解决的问题本课题的研究目的就是要通过对基于Android的多功能视频播放的系统设计与实现,探讨该系统的实现过程,以有效满足Android手机用户在视频播放中常见的需求。本课题的主要内容为:(1)根据对Android手机视频播放器功能的了解和分析,从功能和实用的角度出发,设计并实现Android视频播放器;(2)对Android视频播放器进行模块划分;(3)对各模块分析并设计、实现;(4)从功能多样性角度考虑,尽可能添加一些附加的设计方案并实现。2 Android相关技术介绍及环境搭建2.1 Android介绍Android是“机器人”的意思,是Google公司于2007年11月5日发布的一个机遇Linux平台的开源手机操作系统。该系统由底向上一共分为了4层,如图2-1。每一层对把底层实现封装,并提供调用接口给上一层。图2-1Android系统架构(1)Linux内核(LinuxKernel)。Android运行在LinuxKernel2.6之上,但是把Linux内核GNU协议约束的部分做了取代。这样,运行在Android上的程序可以用于商业目的。Linux内核是硬件和软件层之间的抽象层。(2)中间件。中间件包括两部分:核心库和运行时环境。核心库包SurfaceManager,显示系统管理库,负责把2D或3D内容显示到屏幕;MediaFramework,媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQLite,数据库,一个功能十分强大的轻量级嵌入式关系数据库;WebKit浏览器引擎等。运行时环境主要包括一个Dalvik Virtual Machin,Dalvik虚拟机,区别于Java虚拟机的是,每一个Android应用程序都在自己的进程中运行,都有一个属于自己的Dalvik虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。(3)应用程序框架。丰富而又可扩展性的视图(View),可以用来构建应用程序,它包括列表(List),网格(Grids),文本框(Textboxs),按钮(Button),可嵌入的Web浏览器等。内容提供者(ContentProviders)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享他们各自的数据。资源管理器(ResourceManager)提供非代码资源的访问,如本地字符串,图形,和布局文件(LayoutFiles)。通知管理器(NotificationManager)使得应用程序可以在状态栏中显示自己定义的提示信息。活动管理器(ActivityManager)用来管理应用程序的生命周期,并提供常用的导航回退功能。(4)应用程序。Android系统会内置一些应用程序包,包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理器等等。Android应用程序由强大的Java语言来编写,也支持其他一些语言如C、Perl等。其中Java应用最为广泛,其他语言已经就看不到了。2.2 Android开发平台(1)JDK1.8.0:JDK(JavaDevelopmentKit)是SunMicrosystems针对Java开发员的产品。是开发Android所必须要搭建的环境,下载地址是/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,如图2-2。下载完成后,双击运行JDK安装程序并根据提示设定环境变量。图2-2 Jdk下载地址(2) eclipse-jee-kepler-SR2-win32:Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。是我们开放Android程序的主要编译软件,下载地址是/downloads/,如图2-3。图2-3 Eclipse下载地址(3)ADT-22.6.2:AndroidDevelopmentTools-安卓开发工具。目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,下载地址是/sdk/installing/installing-adt.html,如图2-4。图2-4 ADT下载地址启动Eclipse,单击“help”菜单,选择 Install New Software命令,进行安装,如图 2-5。图2-5 ADT的安装(4)Android-SDK:SDK(softwaredevelopmentkit)称为软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合,如图2-6所示,这里我们下载Android 4.4.2、Android 4.3、Android4.2.2和Android 2.2.3等版本。图2-6 SDK下载与安装 (5)AVD:AVD的全称为:AndroidVirtualDevice,就是Android运行的虚拟设备,他是Android的模拟器识别。建立的Android要运行,必须创建AVD,每个AVD上可以配置很多的运行项目。创建AVD的方法有两种。一是通过eclipse开发环境,二是通过命令行创建,这里我们使用通过eclipse开发环境创建AVD的方法,如图2-7所示。图2-7 AVD的创建(5)DDMS:DDMS的全称是Dalvik Debug Monitor Service,它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、*SMS、虚拟地理坐标等等。如何启动 DDMS启动DDMS有两种方法。如下:1、直接双击 SDK toolsddms.bat 运行;2、在Eclipes中启动DDMS。3 系统分析及系统结构设计与实现3.1 系统分析3.1.1 系统可行性分析可行性研究是为了弄清楚系统开发的项目是不是可以实现和值得进行研究的过程,实际上是一次大大简化系统分析和系统设计的过程,所以,进行可执行性的分析是非常必要的,也是很重要的,经过最初的设计目标和进行的实时调查得出以下四点的可行性分析:(1)技术可行性:Eclipse+AndroidADT的技术已经较为成熟,通过SUN公司(现被ORCEL公司收购)推出的跨平台、动态的JAVA语言进行开发。(2)运行可行性:该系统需要Android虚拟机环境,Eclipse中安装ADT,DDMS等GoogleAndroid相关插件。其运行环境已经相当稳定,它功能丰富,包括了完备的Android程序的编码、调试、测试和发布功能,其中支持所有Android应用开发相关技术,包括SQLite,Skia,3D制作,AndroidXML,能够很好的发布Android的应用程序APK包。(3)法律可行性:因为是自主开发设计,所以不会构成侵权,在法律上是可行的。通过以上的可行性分析,将采用Eclipse+AndroidADT+DDMS技术,运用JAVA语言进行系统的开发。3.1.2 系统需求分析根据分析需求,这个系统必须实现以下的功能:(1)实现手机支持的视频格式文件的播放功能。作为播放器,其核心就是能够流畅的播放视频文件。手机一般不会支持对解码要求太高的格式,如rmvb。作为手机硬件能够承载的视频流文件,都应当能够流畅的播放。(2)能够在手机里面定位视频文件。在本播放器设计中,一个亮点就是自定义一个文件列表,能够访问手机里面任何能够进入的文件。这样,也就能够不需要将视频文件放在一个系统固定的位置,您可以自己新建一个存放视频文件的文件夹,放在任何你想要放的地方。这样,需要播放你的视频文件的时候,直接定位再好不过。(3)能够智能搜索出所有android sdcard中的视频文件。 做视频的智能搜索,也是能够快速定位位于sdcard中的视频文件的另一个快捷的方法。在智能搜索设计中,通过mediascanner进行sdcard中的所有视频文件的扫描,包括自动搜索和手动添加。同时,将其显示到界面。一般,当手机中存放的视频文件过多,但对于新添加的视频文件位置很清楚时,选择手都添加比较好。(4)能够对视频文件常规信息信息进行读取。当播放视频文件时,视频名称、视频时间长度等信息显示在屏幕相应位置。3.2 系统结构设计本次课题设计的Android视频播放器应用程序组要由4个Activity组成,分别是MediaplayerActivity,MediaListActivity,FileChooserActivity,UpdateMediaListActivity。每一个Activity实现相应部分的功能,每一个Activity对应有一个或多个.xml的布局文件。在布局文件中,添加用来实现相应部分功能的各种控件。如图3-1所示。MediaplayerActivity(main.xml布局文件)程序运行时最先启动的Activatiy 用户最先看到的页面开始MediaListActivity(medialist.xml)在Activity中,用户可以看到视频文件UpdateMediaListActivity(updatelist.xml)用户可以更新视频列表FileChooserActivity(fileselect.xml)用户可以在此进行视频文件的添加操作图3-1 系统结构框图(1) MeidaPlayerActivityMediaplayerActivity中包含的控件数量最多,与用户打交道也最为广泛,每个控件都对应有各自的功能,如图3-2所示。关于视频文件的列表的显示,在MediaListActivity中实现。ChooserButton,添加视频按钮。按下此按钮之后,手机屏幕将显示SDCard中文件列表,通过浏览不同路径,添加所需的视频文件至视频列表中。SurfaceView用来将视频画面投放到手机屏幕上,而ImageView用来显示视频是否处于播放状态。即当暂停视频播放时,ImageView处于Visible(可见)状态,当继续之前暂停的视频播放时,ImageView处于InVisible(不可见)状态。图3-2 MediaplayerActivity控件分布第一行中:CheckButton,查看列表按钮。按下此按钮之后,显示手机中存在的视频文件,并以列表的形式显示显示在手机屏幕上。ImageButton,之后的三个ImageButton分别是volumeButton,upButton,downButton,即声音按钮,加大音量按钮,减小音量按钮。第二行中:TextView,文本视图控件。前一个TextView用来显示“视频文件:”,即一个提示信息;后一个TextView用来显示正播放的视频文件的名称。然后是ImageButton控件,这里添加一个声音的小图标。最后是一个ProgressBar控件,该控件是一个进度条。当我们加大或者减小音量时,该进度条会相应的发生变化。第三行中:一个SurfaceView控件加上一个ImageView控件。第四行中:两个TextView分别用来显示当前正杂播放的视频的时间信息,前者显示当前播放时间长度,后者显示视频文件的最大时间长度。第五行中:SeekBar,另一种进度条,随着视频播放进度而变化。第六行中:六个ImageButton控件,分别为play,pause,reset,stop,last,next,即播放按钮,暂停按钮,重置按钮,停止按钮,上一个按钮,下一个按钮。(2) MediaListActivity接下来是MediaListActivity。该Activity引用的是medialist.xml布局文件。由于只需要显示视频文件列表,所以在medialist.xml布局文件中只添加了一个ListView控件用来实现视频列表的显示功能,如图3-3所示。ListViewVideoViewVideoView图3-3 MediaList(3) FilechooserActivity然后是FileChooserActivity,当按下添加视频Button时,由MediaplayerActivity跳转到此Activity,并根据用户操作来完成添加视频文件的操作。该Activity引用fileselect.xml布局文件。该布局文件中包含一个TextView,一个ListView,和两个Button控件。TextView用来显示当前正在浏览的路径,ListView用来显示当前路径下存在的文件或者文件夹。当选中视频文件后,单击确认Button即可。若不打算添加,则取消即可,如图3-4所示。TextViewListView文件列表文件列表取消Button确认Button图3-4 FileChooserActivity布局(4) UpdateMediaListActivity最后是UpdateMediaListActivity。当用户通过Menu菜单点击“更新列表”选项时,程序跳转到此Activity。该Activity引用updatelist.xml布局文件。该布局文件中也仅仅只包含一个ListView控件,用来显示更新选项。如图3-5所示。自动搜索手动添加图3-5 更新列表3.3 系统设计的目标及基本思路本次毕业设计使用Eclipse+ADT插件+DDMS插件搭建的Android开发平台环境,开发语言为Java语言。需要开发出基于Android平台的视频播放器应用程序,并能够在Android手机上运行。基本思路介绍如下:第一步:程序运行时进入主Activity,通过更新或查看文件列表,选择一个视频文件;第二步:读入视频文件,调用Mediaplayer.setDataSource()方法设置文件路径,并通过Mediaplayer.prepare()方法将Mediaplayer对象置为准备状态;第三步:调用Mediaplayer.start()方法播放视频,此时可以调节音量、进度,暂停播放,重置播放等等操作;第四步:播放完成后,Mediaplayer对象进入了PlaybackCompleted状态,此时可以选择其他视频文件进入下一个视频的播放或者退出程序。3.4 Android视频播放器相关技术3.4.1 Mediaplayer视频技术在Android系统中,最简单、最常用的视频技术是Mediaplayer接口,通过此接口可以播放指定的音频和视频文件,另外也可以通过VideoView来播放视频,虽然VideoView比Mediaplayer简单易用,但定制性不如Mediaplayer,要视情况选择。Mediaplayer播放音频比较简单,但是要播放视频就需要SurfaceView。SurfaceView比普通的自定义View在绘图上更有优势,它支持完全的OpenGLES库。Mediaplayer能被用来控制音频/视频文件或流媒体的回放,可以在VideoView里找到关于如何使用这个类中的方法的例子。使用Mediaplayer时限音频和视频播放的基本步骤,首先生成Mediaplayer对象,根据播放文件从不同的地方使用不同的生成方式;得到Mediaplayer对象后,根据实际需要调用不同的方法,如start()、stop()、pause()、release()等。需要注意的是,在不需要播放的时候要及时释放掉与Mediaplayer对象相连接的播放文件。图3-6显示了一个Mediaplayer对象被支持的播放控制操作驱动的生命周期和状态。椭圆标识代表Mediaplayer对象可能主流的状态。由一个箭头开始的弧线代表同步的方法调用,而以双箭头开头的弧线代表异步调用方法。通过图3-6可以知道一个Mediaplayer对象有如下状态。当一个MediaPlayer对象被刚刚用new操作符创建或是调用了reset()方法后,它就处于Idle状态。当调用了release()方法后,它就处于End状态。这两种状态之间的时间是MediaPlayer对象的生命周期。在一个新构建的MediaPlayer对象和一个调用了reset()方法的MediaPlayer对象之间有个微笑但十分重要的差别。在Idle状态时,调用getCurrentPosition()、getDuration()、getVideoHeight()、getVideoWidth()、setAudioStreamType(int)、setLooping(boolean)、setVolume(float,float)、pause()、start()、stop()、seekTo(int)、prepare()或者是prepareAsync()方法都是编程错误。当一个MediaPlayer对象处于刚被创建的时候,内部的播放引擎和对象的状态都没有改变,在这个时候调用以上方法,框架将无法回调客户端程序注册OnErrorListener.onError()方法;但若这个MediaPlayer对象调用了reset()方法之后,再调用以上方法,内部的播放引擎就会回调客户端注册OnErrorListener.onError()方法,并将错误的状态传入。图3-6 Mediaplayer对象状态所以,一旦一个MediaPlayer对象不再被使用,应立即调用release()方法来释放咋内部的播放引擎中与这个MediaPlayer对象关联的资源。资源可能包括如硬件加速组件的单态组件,若没有调用release()方法可能会导致之后dMediaPlayer对象实例无法使用这个单态硬件资源,从而运行失败。一旦MediaPlayer对象进入了End状态,它不能再被使用,也没有办法迁移到其他状态。此外,使用new创建的MediaPlayer对象处于Idle状态,而那些通过重载的create()便利方法创建的MediaPlayer对象却不是处于Idle状态。事实上,如果成功调用了重载的create()方法,那么这些对象已经是处于Prepare状态了。在一般情况下,由于种种原因,一些播放控制操作可能会失败,如不支持视频格式,缺少隔行扫描,分辨率过高,流超时等等。因此,错误报告和回复在这种情况下是非常重要的。有时,由于编程的错误,在处于无效状态的情况下调用了一个播放控制操作可能发生。在所有可能的错误条件下,内部的播放器引擎会自动的调用一个由程序自身所提供的OnErrorListener.onError()方法。程序可以通过调用Mediaplayer.setOnErrorListener()方法来注册OnErrorListener。如一旦发生错误,MediaPlayer对象会进入到Error状态。为了重用一个处于Error状态的MediaPlayer对象,可以调用reset()方法把这个对象恢复成Idle状态。注册一个OnErrorListener获知内部播放心情发生的错误时良好的编程习惯。在不合法的状态下调用一些方法,如prepare()、prepareAsync()和setDataSource()方法等会抛出IllegalStateException异常。调用setDataSource(FileDescription)方法、setDataSource(String)方法、或者是setDataSource(Uri)方法、setDataSource(FileDescriptor,long,long)方法,便可以使MediaPlayer对象从Idle状态迁移到Initialized状态。若此时MediaPlayer对象处于其他状态下,调用setDataSource()方法会抛出IllegalStateException异常。在开始播放前,MediaPlayer对象必须进入Prepared状态。在此有两种方法(同步和异步)可以实现。调用Prepare()方法(同步),此方法返回表示MediaPlayer对象已经进入Prepared状态。调用prepareAsync()方法(异步),此方法返回表示MediaPlayer对象进入Preparing状态并返回,而内部的播放引擎继续未完成的准备工作。在开始播放时,必须调用start()方法。当方法返回成功时,MediaPlayer对象应当处于Started状态。isPlaying()方法可以被调用来测试某个MediaPlayer对象是否处于Started状态。播放可以被暂停、停止,以及调整当前的播放位置。Pause()方法可以是MediaPlayer对象进入Paused状态。注意Started状态和Paused状态的相互转换在内部播放引擎中是异步的。所以可能需要一点时间在isPlaying()方法中更新状态。调用stop()方法会停止播放,并且还会让一个处于Started、Paused、Prepared状态的MediaPlayer对象进入Stopped状态。对一个已经处于Stopped状态的MediaPlayer对象的stop()方法没有影响。调用seekTo()方法可以调整播放的位置。seekTo(int)方法是异步执行的,所以它可以马上返回,但是实际的定位播放操作可能需要一段时间才能完成,尤其是播放流形式的音频/视频。当实际的定位操作完成之后,内部播放引擎会调用程序提供的OnSeekComplete()回调方法。在此需要注意的是,seekTo(int)方法也可以在其他状态下调用,比如Prepared、Paused和PlaybackCompleted状态。此外,当前的音频/视频播放位置,实际上可以调用getCurrentPosition()方法来得到,它可以帮助播发器的应用程序不断更新播放进度。当播放到流的末尾时完成播放。如果调用setlooping(boolean)方法开启了循环模式,那么这个MediaPlayer对象会重新进入Started状态。如果没有开启循环模式,那么内部播放引擎会调用OnCompletion.onCompletion()回调方法。一旦调用了该方法,说明这个MediaPlayer对象进入了PlaybackCompleted状态。此时可以再调用start()方法来让这个MediaPlayer对象进入Started状态。3.4.2 Surface、SurfaceView、SurfaceHolder三者之间的关系(1) SurfaceSurface就是“表面”的意思。在SDK的文档中,对Surface的描述是这样的:“Handleontoarawbufferthatisbeingmanagedbythescreencompositor”,翻译成中文就是“由屏幕显示内容合成器(screencompositor)所管理的原生缓冲器的句柄”,这句话包括下面两个意思:通过Surface(因为Surface是句柄)就可以获得原生缓冲
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 变电工程施工安全协议标准范例
- 新课标下信息技术与初中数学课堂教学的融合
- 代建房屋合同样本
- 企业购买物品合同样本
- 业绩考核合同标准文本
- 2025年TI粉末多孔过滤器项目发展计划
- 部编版三年级语文下册-《荷花》-教学设计及教学反思
- 体育课教学设计
- 供货应急响应预案
- 期末成绩奖励方案
- 江苏徐州市深地科学与工程云龙湖实验室社会招考聘用9人模拟试卷【附答案解析】
- 土方回填施工记录表
- 植物根茎叶课件
- 反生产行为讲稿
- 施工现场消防安全技术交底
- 冀教版二年级语文下册看图写话专项加深练习题含答案
- 焊接工艺评定及焊接工艺技术评定管理标准
- 洗衣房各岗位工作流程
- 基于SWOT分析的义乌市现代物流业发展研究
- 基于自适应滤波对音频信号的处理详解
- 油浸式变压器工艺文件汇编
评论
0/150
提交评论