搜档网
当前位置:搜档网 › 基于Android的视频播放器的设计与实现

基于Android的视频播放器的设计与实现

基于Android的视频播放器的设计与实现
基于Android的视频播放器的设计与实现

基于Android的视频播放器的设计与实现

基于Android的视频播放器的设计与实现

中文摘要

如今,随着基于Android操作系统的智能手机的广泛应用,视频播放器已成为智能手机的一个必不可少的程序,广大用户迫切需要一个贴近用户、方便用户、个性化的视频播放器。因此,设计一个基于android手机的多功能播放器,具有重要的实际意义。

本次毕业设计主要使用JDK + Eclipse + Android-SDK-Windows工具进行开发,使用的编程语言是Java语言。该程序主要由4个不同Activity来实现,每个Activity实现相应的功能模块,能够有效满足Android手机用户在视频播放中的常见需求。

本论文详细介绍了播放器程序的设计思路、设计方案、系统结构和项目工程结构,对系统的可行性与需求性进行了详细的分析,阐述了系统各个模块功能的设计与实现。对程序主要的Activity都进行了详细的介绍和分析,包括对其使用的布局文件的具体介绍,以及各个控件的作用。在最后进行了程序测试,对每一个实现的模块功能都做了测试,并且记录了大量截图用来展示测试结果,以观察程序应有的功能是否正常运行,以及发现程序中可能存在的问题。所开发的程序界面比较友好,操作相对容易,达到设计要求。

关键词:安卓;视频播放;Activity;Mediaplayer

The Design and Implementation of Video Player Based on Android

ABSTRACT

Now, with the wide application of smart phone based on the Android operating system, video player has become the essential application of smart phone. Most of consumers urgently require a personalized video player which is close to user and facilitate user. Therefore, the design of a multifunctional player based on android mobile phones has an important practical significance.

The project design is developed by using JDK, Eclipse, and Android-SDK-Windows tools. The programming language is Java. The program consists of four different Activities and each Activity achieves the corresponding functional modules which can effectively satisfy the common requirements for playing video on Android mobile phones.

This paper introduced the design ideas, design scheme, system architecture and project engineering structures of video player. The feasibility and requirements of system were analyzed in detail. The system function and each module were explained. The main Activity of the program are described and analyzed in detail including the using layout file, as well as the role of each control. Finally, I made the test for the program including the functions of each implemented modules. In order to observe whether the program should function properly and find the problems that may exist in the program, many screenshots were saved to demonstrate the test results. The developed program has a friendly interface and can be operated relatively easy, which has achieved the design requirement.

KEY WORDS: Android; Video Play; Activity; Mediaplayer

目录

中文摘要 ..................................................................... I ABSTRACT .................................................................... I I 目录 ................................................................... I II 第一章绪论 .. (1)

1.1课题的来源及意义 (1)

1.2 ANDROID发展现状及前景 (1)

1.3项目的主要工作和解决的问题 (2)

1.4系统设计的目标及基本思路 (3)

1.5论文组织结构 (3)

第二章 ANDROID视频播放器相关技术介绍 (4)

2.1 ANDROID介绍 (4)

2.2 ANDROID开发平台及相关技术 (5)

2.2.1 ANDROID-WINDOWS开发环境 (5)

2.2.2 MEDIAPLAYER视频技术 (6)

2.2.3 SURFACE、SURFACEVIEW、SURFACEHOLDER三者之间的关系 (9)

第三章系统分析及系统结构设计与实现 (11)

3.1系统分析 (11)

3.1.1系统可行性分析 (11)

3.1.2 系统需求分析 (11)

3.2系统结构设计 (12)

第四章测试 (16)

4.1测试环境和条件 (16)

4.2测试 (16)

4.3测试结果分析 (24)

结论 (25)

参考文献 (26)

附录 (28)

第一章绪论

1.1课题的来源及意义

在这个信息化的时代,IT业已经成为世界发展的主流,我们对信息技术的依赖远远超过了对我们自己的依赖,计算机和手机已经成为我们日常生活中不可缺少的获得信息的渠道。正因为如此,各种各样的软件层出不穷,我们的生活也因为各种各样的软件变的更有滋有味。不缺乏娱乐性,也不缺乏教育意义,让我们从这些软件中受益匪浅,使我们看到了相比以前的巨大进步。同时,随着科技的发展,计算机越来越精致,手机也越来越智能化,所以我们的依赖性也越来越大,越来越离不开这些给我们提供日常信息的工具。手机也已不再仅仅是简单的人与人通话的工具,而是在很大程度上成为了我们获取信息的一个更好的渠道。一个好的软件,能够标志一个手机品牌的地位。所以,开发一款好的手机软件是相当必要的。以前我们看电影,看视频,都要去电影院或者是影吧,而且时间有限,很不方便;而现在是在电脑上或者手机上看视频,看小说,文档等等。以此看来,一个好的手机视频播放器软件的开发是相当有必要的。

作为集通讯与娱乐消费为一体的智能手机,播放器是其中一个必不可少的重要功能,一个贴近用户,方便用户的多功能的播放器也是用户所渴望的,更是开发人员应当致力于的。随着Google推出的Android手机的不断更新换代,技术方面也日趋成熟,一个良好的视频播放器的设计与实现已经成为可能。

目前,作为Android的手机用户而言,都有视频播放器的实体应用。但是,对于绝大多少而言,其界面单调,功能单一。比如,界面与其他非智能的手机没有大的区别,而功能上面,也就除了基本的播放控制流程之外,多上一个视频基本信息的显示,同时加上一个对预设定路径的播放列表的展示。因此,开发一款界面友好、炫丽、功能更多的视频播放器,更好的贴近用户,满足用户需求,其应用前景也是相当乐观的。

1.2 Android发展现状及前景

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。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、Windows mobile等操作系统收取高额授权费用的模式,使得智能手机成本大大的降低。而正是由于它开放源代码,使得手机产生更多个性化的应用。同时,合作方能够在这里得到利润或者创造价值,手机软件行业得到维护协调发展。以Google、苹果和诺基亚为中心各自形成的生态链将以原来数倍的速度推动移动互联网的发展,这正是Google发布Android平台的意义,也是Android平台存在的使命所在。作为Android平台成员之一的中国移动也投资成立了一家通讯公司,专门从事G oogle手机软件的应用以及本地化的软件的开发,比如将在Google手机平台上添加飞信、输入法等一系列符合国内用户使用特色的功能。国内众多企业也将眼光投入到Android上面,并启动了相关的计划来深入的理解并发展Android。更多的手机软件开发企业已经或者筹备着将公司进行转型,从其他方向的开发转向到Android的开发。由此可见,无论是在国内还是在国外,Android平台对手机软件行业和移动手机平台将发挥极大地推动作用,而在未来的几年时间里,Android将越发的凸显自己的重要性[1]。

目前国内的Android开发还是主要以应用开发为主,主要分成3类:为企业开发应用、开发通用应用(放到Android Market或者其他App Market销售)以及游戏开发(放到Android Market或者其他App Market销售)。第一类开发者一般身处规模较大的公司,这些公司主要为自有品牌或者其他品牌设计手机或者平板电脑的总体方案。除了根据需求对系统进行定制外,更多的工作在于为这些系统编写定制的应用。第二类开发者,一般处于创业型公司或者是独立开发者,他们的盈利方式主要是2种:为国外公司进行外包开发,或者通过Google的移动广告(AdMob)通过广告点击分成。而理论上的通过付费下载的形式来盈利的,现在国内鲜见成功者。第三类开发者,目前和第二类开发者类似[3]。

1.3项目的主要工作和解决的问题

本课题的研究目的就是要通过对基于Android的多功能视频播放的系统设计与实现,探讨该系统的实现过程,以有效满足Android手机用户在视频播放中常见的需求。本课题的主要内容为:

(1)根据对Android手机视频播放器功能的了解和分析,从功能和实用的角度出发,设计并实现Android视频播放器;

(2)对Android视频播放器进行模块划分;

(3)对各模块分析并设计、实现;

(4)从功能多样性角度考虑,尽可能添加一些附加的设计方案并实现。

1.4系统设计的目标及基本思路

本次毕业设计使用Eclipse + ADT插件+ DDMS插件搭建的Android开发平台环境,开发语言为Java语言。需要开发出基于Android平台的视频播放器应用程序,并能够在Android 手机上运行。

基本思路介绍如下:

第一步:程序运行时进入主Activity,通过更新或查看文件列表,选择一个视频文件;

第二步:读入视频文件,调用Mediaplayer.setDataSource()方法设置文件路径,并通过Mediaplayer.prepare()方法将Mediaplayer对象置为准备状态;

第三步:调用Mediaplayer.start()方法播放视频,此时可以调节音量、进度,暂停播放,重置播放等等操作;

第四步:播放完成后,Mediaplayer对象进入了PlaybackCompleted状态,此时可以选择其他视频文件进入下一个视频的播放或者退出程序。

1.5论文组织结构

本文主要由:中英文摘要、目录、绪论、课题相关技术介绍、系统可行性分析、系统需求分析、程序实现、测试、结束语、参考文献、致谢语以及附录构成。

第一章绪论主要分析和介绍背景、课题主要研究的问题以及系统设计的目标及基本思路。

第二章主要介绍课题的相关技术。

第三章是系统分析以及系统功能的设计与实现,其中包括系统可行性分析和系统需求分析。

第四章是程序测试和结果的分析与研究等。

最后对全文进行了总结和展望,附录部分为主要功能的函数源代码。

第二章 Android视频播放器相关技术介绍

2.1 Android介绍

Android是“机器人”的意思,是Google公司于2007年11月5日发布的一个机遇Linux平台的开源手机操作系统。该系统由底向上一共分为了4层,如图2-1。每一层对把底层实现

封装,并提供调用接口给上一层。

图2-1 Android系统架构

(1) Linux内核(Linux Kernel)。Android运行在Linux Kernel2.6之上,但是把Linux

内核GNU协议约束的部分做了取代。这样,运行在Android上的程序可以用于商业目的。Linux内核是硬件和软件层之间的抽象层。

(2) 中间件。中间件包括两部分:核心库和运行时环境(Libraries & Android Runtime)。核心库包括,SurfaceManager,显示系统管理库,负责把2D或3D内容显示到屏幕;MediaFramework,媒体库,负责支持图像,支持多种视频和音频的录制和回放;SQLite,

数据库,一个功能十分强大的轻量级嵌入式关系数据库;WebKit浏览器引擎等。运行时环境主要包括一个Dalvik Virtual Machin,Dalvik虚拟机,区别于Java虚拟机的是,每一个Android应用程序都在自己的进程中运行,都有一个属于自己的Dalvik虚拟机,这一点可以让系统在运行时可以达到优化,程序间的影响大大降低。Dalvik虚拟机并非运行Java字节码,而是运行自己的字节码。

(3)应用程序框架。丰富而又可扩展性的视图(View),可以用来构建应用程序,它包括列表(List),网格(Grids),文本框(Textboxs),按钮(Button),可嵌入的Web浏览器等。内容提供者(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享他们各自的数据。资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件(LayoutFiles)。通知管理器(Notification Manager)使得应用程序可以在状态栏中显示自己定义的提示信息。活动管理器(Activity Manager)用来管理应用程序的生命周期,并提供常用的导航回退功能。

(4)应用程序。Android系统会内置一些应用程序包,包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理器等等。Android应用程序由强大的Java语言来编写,也支持其他一些语言如C、Perl等。其中Java应用最为广泛,其他语言已经就看不到了[4]。

2.2 Android开发平台及相关技术

2.2.1 Android-Windows开发环境

(1) JDK1.6.0_16:JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境、Java工具和Java基础类库。SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。ME(J2ME),micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。没有JDK的话,无法编译Java程序[10]。

(2) Eclipse-SDK-3.6.2-win32:Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)[10]。

(3) Android-SDK:SDK(software development kit)称为软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此,Android SDK 指的是Android专属的软件开发工具包。

(4) ADT_16:Android Development Tools--安卓开发工具。目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具[2]。

(5) A VD:A VD的全称为:Android Virtual Device,就是Android运行的虚拟设备,他是Android的模拟器识别。建立的Android要运行,必须创建A VD,每个A VD上可以配置很多的运行项目。创建A VD的方法有两种。一是通过eclipse 开发环境,二是通过命令行创建[5]。

2.2.2 Mediaplayer视频技术

在Android系统中,最简单、最常用的视频技术是Mediaplayer接口,通过此接口可以播放指定的音频和视频文件,另外也可以通过VideoView来播放视频,虽然VideoView比Mediaplayer简单易用,但定制性不如Mediaplayer,要视情况选择。Mediaplayer播放音频比较简单,但是要播放视频就需要SurfaceView。SurfaceView比普通的自定义View在绘图上更有优势,它支持完全的OpenGL ES库。

Mediaplayer能被用来控制音频/视频文件或流媒体的回放,可以在VideoView里找到关于如何使用这个类中的方法的例子。使用Mediaplayer时限音频和视频播放的基本步骤,首先生成Mediaplayer对象,根据播放文件从不同的地方使用不同的生成方式;得到Mediaplayer对象后,根据实际需要调用不同的方法,如start()、stop()、pause()、release()等。需要注意的是,在不需要播放的时候要及时释放掉与Mediaplayer对象相连接的播放文件[7]。

图2-2显示了一个Mediaplayer对象被支持的播放控制操作驱动的生命周期和状态。椭圆标识代表Mediaplayer对象可能主流的状态。由一个箭头开始的弧线代表同步的方法调用,而以双箭头开头的弧线代表异步调用方法。通过图2-2可以知道一个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()方法,并将错误的状态传入。

图2-2 Mediaplayer对象状态

所以,一旦一个MediaPlayer对象不再被使用,应立即调用release()方法来释放咋内部的播放引擎中与这个MediaPlayer对象关联的资源。资源可能包括如硬件加速组件的单态组件,若没有调用release()方法可能会导致之后dMediaPlayer对象实例无法使用这个单态硬件资源,从而运行失败。一旦MediaPlayer对象进入了End状态,它不能再被使用,也没有办法迁移到其他状态[8]。

此外,使用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状态[6]。

2.2.3 Surface、SurfaceView、SurfaceHolder三者之间的关系

(1) Surface

Surface就是“表面”的意思。在SDK的文档中,对Surface的描述是这样的:“Handle onto a raw buffer that is being managed by the screen compositor”,翻译成中文就是“由屏幕显示内容合成器(screen compositor)所管理的原生缓冲器的句柄”,这句话包括下面两个意思:通过Surface(因为Surface是句柄)就可以获得原生缓冲器以及其中的内容。就像在C语言中,可以通过一个文件的句柄,就可以获得文件的内容一样;原生缓冲器(rawbuffer)是用于保存当前窗口的像素数据的。引伸地,可以认为Android中的Surface就是一个用来画图形(graphics)或图像(image)的地方。根据Java方面的常规知识,我们知道通常画图是在一个Canvas对象上面进行的,由此,可以推知一个Surface对象中应该包含有一个Canvas 对象,事实上的确如此,而且这一点可以很容易通过debug运行程序的方式得到证明。Surface 中有一个Canvas成员,专门用于画图的。所以,Surface中的Canvas成员,是专门用于供程序员画图的场所,就像黑板一样;其中的原生缓冲器是用来保存数据的地方;Surface本身的作用类似一个句柄,得到了这个句柄就可以得到其中的Canvas、原生缓冲器以及其它方面的内容[3]。

(2) SurfaceView

SurfaceView,顾名思义就是Surface的View,通过SurfaceView就可以看到Surface的部分或者全部的内容,下面用一个图来形象地描述一下Surface和SurfaceView的关系:

图2-3 Surface与SurfaceView

也就是说,Surface是用通过SurfaceView才能展示其中的内容。由此来说,SurfaceView 中的View之确切的含义应该是viewport即“视口”的意思,类似数据库的设计,假定一个数据表有20个字段,但我们常常只用到其中的5个字段,那么就可以在原数据表的基础上,通过SQL语句CREATEVIEW来创建只包含那5个字段内容的view。另一方面,SurfaceView 是Android中View的子类。事实上,在Android中所有用于界面展示的类皆为View的子类,包括那些不可见的、各种各样的Layout。所以说,SurfaceView中的View有两个含义:视口(viewport)的意思和SurfaceView是View的派生类在Android中Surface是从Object 派生而来,且实现了Parcelable接口。看到Parcelable就让人能很自然地想到数据容器,SurfaceView就是用来展示Surface中的数据的。在这个层面上而言,Surface就是管理数据的地方,SurfaceView就是展示数据的地方[3]。

(3)SurfaceHolder

SurfaceHolder是一个接口,其作用就像一个关于Surface的监听器。提供访问和控制SurfaceView背后的Surface 相关的方法(providingaccess and control over this SurfaceView's underlying surface),它通过三个回调方法,让我们可以感知到Surface的创建、销毁或者改变。在SurfaceView中有一个方法getHolder,可以很方便地获得SurfaceView 所对应的Surface所对应的SurfaceHolder。

从设计模式的高度来看,Surface、SurfaceView和SurfaceHolder实质上就是广为人知的MVC,即Model-View-Controller。Model就是模型的意思,或者说是数据模型,或者更简单地说就是数据,也就是这里的Surface;View即视图,代表用户交互界面,也就是这里的SurfaceView;SurfaceHolder很明显可以理解为MVC中的Controller(控制器)。这样看起来三者之间的关系就清楚了很多[9]。

第三章系统分析及系统结构设计与实现

3.1系统分析

3.1.1系统可行性分析

可行性研究是为了弄清楚系统开发的项目是不是可以实现和值得进行研究的过程,实际上是一次大大简化系统分析和系统设计的过程,所以,进行可执行性的分析是非常必要的,也是很重要的,经过最初的设计目标和进行的实时调查得出以下四点的可行性分析:

(1)技术可行性:Eclipse + Android ADT的技术已经较为成熟,通过SUN公司(现被ORCEL公司收购)推出的跨平台、动态的JA V A语言进行开发。

(2)运行可行性:该系统需要Android虚拟机环境,Eclipse中安装ADT,DDMS等Google Android相关插件。其运行环境已经相当稳定,它功能丰富,包括了完备的Android 程序的编码、调试、测试和发布功能,其中支持所有Android应用开发相关技术,包括SQLite,Skia,3D制作,Android XML,能够很好的发布Android的应用程序APK包。

(3)法律可行性:因为是自主开发设计,所以不会构成侵权,在法律上是可行的。

通过以上的可行性分析,将采用Eclipse+Android ADT + DDMS技术,运用JA V A语言进行系统的开发。

3.1.2 系统需求分析

根据分析需求,这个系统必须实现以下的功能:

(1)实现手机支持的视频格式文件的播放功能。

作为播放器,其核心就是能够流畅的播放视频文件。手机一般不会支持对解码要求太高的格式,如rmvb。作为手机硬件能够承载的视频流文件,都应当能够流畅的播放。

(2)能够在手机里面定位视频文件。

在本播放器设计中,一个亮点就是自定义一个文件列表,能够访问手机里面任何能够进入的文件。这样,也就能够不需要将视频文件放在一个系统固定的位置,您可以自己新建一个存放视频文件的文件夹,放在任何你想要放的地方。这样,需要播放你的视频文件的时候,直接定位再好不过。

(3)能够智能搜索出所有android sdcard中的视频文件。

做视频的智能搜索,也是能够快速定位位于sdcard中的视频文件的另一个快捷的方法。

在智能搜索设计中,通过mediascanner进行sdcard中的所有视频文件的扫描,包括自动搜索和手动添加。同时,将其显示到界面。一般,当手机中存放的视频文件过多,但对于新添加的视频文件位置很清楚时,选择手都添加比较好。

(4)能够对视频文件常规信息信息进行读取。

当播放视频文件时,视频名称、视频时间长度等信息显示在屏幕相应位置。

3.2系统结构设计

本次课题设计的Android视频播放器应用程序组要由4个Activity组成,分别是Mediaplayer Activity,MediaList Activity,FileChooser Activity,UpdateMediaList Activity。每一个Activity实现相应部分的功能,每一个Activity对应有一个或多个.xml的布局文件。在布局文件中,添加用来实现相应部分功能的各种控件。如图3-1所示。

图3-1 系统结构框图

(1)MeidaPlayerActivity

MediaplayerActivity中包含的控件数量最多,与用户打交道也最为广泛,每个控件都对

应有各自的功能,如图3-2所示。

图3-2 MediaplayerActivity控件分布

第一行中:CheckButton,查看列表按钮。按下此按钮之后,显示手机中存在的视频文件,并以列表的形式显示显示在手机屏幕上。关于视频文件的列表的显示,在MediaListActivity中实现。ChooserButton,添加视频按钮。按下此按钮之后,手机屏幕将显示SDCard中文件列表,通过浏览不同路径,添加所需的视频文件至视频列表中。ImageButton,之后的三个ImageButton分别是volumeButton,upButton,downButton,即声音按钮,加大音量按钮,减小音量按钮。

第二行中:TextView,文本视图控件。前一个TextView用来显示“视频文件:”,即一个提示信息;后一个TextView用来显示正播放的视频文件的名称。然后是ImageButton控件,这里添加一个声音的小图标。最后是一个ProgressBar控件,该控件是一个进度条。当我们加大或者减小音量时,该进度条会相应的发生变化。

第三行中:一个SurfaceView控件加上一个ImageView控件。SurfaceView用来将视频画面投放到手机屏幕上,而ImageView用来显示视频是否处于播放状态。即当暂停视频播放时,ImageView处于Visible(可见)状态,当继续之前暂停的视频播放时,ImageView处于InVisible(不可见)状态。

第四行中:两个TextView分别用来显示当前正杂播放的视频的时间信息,前者显示当

前播放时间长度,后者显示视频文件的最大时间长度。

第五行中:SeekBar,另一种进度条,随着视频播放进度而变化。

第六行中:六个ImageButton控件,分别为play,pause,reset,stop,last,next,即播放按钮,暂停按钮,重置按钮,停止按钮,上一个按钮,下一个按钮。

(2)MediaListActivity

接下来是MediaListActivity。该Activity引用的是medialist.xml布局文件。由于只需要显示视频文件列表,所以在medialist.xml布局文件中只添加了一个ListView控件用来实现视频列表的显示功能,如图3-3所示。

图3-3 MediaList

(3)FilechooserActivity

然后是FileChooserActivity,当按下添加视频Button时,由MediaplayerActivity跳转到此Activity,并根据用户操作来完成添加视频文件的操作。该Activity引用fileselect.xml布局文件。该布局文件中包含一个TextView,一个ListView,和两个Button控件。

TextView用来显示当前正在浏览的路径,ListView用来显示当前路径下存在的文件或者文件夹。当选中视频文件后,单击确认Button即可。若不打算添加,则取消即可,如图3-4所示。

图3-4FileChooserActivity布局

(4)UpdateMediaListActivity

最后是UpdateMediaListActivity。当用户通过Menu菜单点击“更新列表”选项时,程序跳转到此Activity。该Activity引用updatelist.xml布局文件。该布局文件中也仅仅只包含一个ListView控件,用来显示更新选项。如图3-5所示。

图3-5 更新列表

相关主题