APP下载

基于Android的视频在线播放功能的设计与实现

2016-11-12郭忠南

无锡职业技术学院学报 2016年5期
关键词:服务器端客户端功能

郭忠南

(无锡机电高等职业技术学校 电子信息工程系, 江苏 无锡 214028)



基于Android的视频在线播放功能的设计与实现

郭忠南

(无锡机电高等职业技术学校 电子信息工程系, 江苏无锡214028)

随着移动互联网的发展与智能终端的普及,移动学习日益成为一种新型学习模式,手机APP也成为一种学习工具。视频在线播放功能是一个完善的移动学习平台所必备的模块。Android系统以其较高的市场占有率和年轻化的用户群体,使得基于Android的应用程序更容易推广。文章分析了功能需求,介绍了相关技术,探讨了视频在线播放在Android系统上的实现细节。该功能在实验室环境下运行良好,对实际应用有着较好的意义。

Android; Web Service; JSON; 视频在线播放

移动学习,简单来说就是在任何时间、任何地点借助移动设备来完成的学习,随着手机等智能终端的发展,移动学习的关注程度与日俱增。移动学习平台必须要能方便地让学习者随时随地学习并能对师生之间的交流提供支持[1]。查阅2016年1月CNNIC 发布的《第37次中国互联网络发展状况调查统计报告》发现,截至2015年12月底,我国网民数量达到 6.88 亿,其中手机网民占 90.1%,数量达 6.2亿[2]。随着智能手机的出现,手机功能的增加,手机从最初的通信逐步发展成为人们获取知识的一种有效工具。智能手机由于其便携性、移动性以及强大功能,迅速成为移动学习的合适工具。

本文结合Android智能手机的系统特性和移动学习的需求,以一个移动学习平台为背景来设计实现一个基于Android的视频在线播放模块,使用该模块,借助智能终端可以实现随时随地进行视频播放。

1 需求分析

1.1功能分析

在多年教育教学过程中发现,虽然集中式的课堂教学仍是学习的最有效方式,但是还需要利用其他方式在业余时间不断对知识进行重复巩固。移动学习可以使学习者课下随时进行课程的学习与复习,是传统学习的一个有效辅助手段。

基于Android的视频在线播放功能分为Android客户端和服务器端系统两大部分。使用客户端,用户可以选择需要观看的视频,并可以对每个视频进行评价,从而达到一种互动的效果;服务器端提供两大功能:一是实现视频资源管理,二是提供 Web Service接口,以便Android客户端能与服务器后台数据库进行交互。

1.2技术分析

(1) Web Service技术。Web Service是一个支持网络条件下不同平台可以互操作的、自描述的、松耦合的、可编程的Web应用程序,它使用HTTP方式处理外部请求,从而引发远程调用。Web Service是系统对外的接口[3],假如我们要从别人服务器获取数据,当然对我们来说最好是希望他们共享数据库,但这是不现实的,他们只会给你提供一个接口来让你来获取数据。借助Web Service技术,能够使得运行于不同平台上的不同应用无须借助于第三方软硬件,就可将数据用于交换或集成。使用Web Service,调用远程服务器上的方法就像使用本地方法一样,我们并不需要关心远程的那个方法是用什么语言编写,也不需要关心远程的方法是基于什么平台。

Android 开发包没有提供访问Web Service的库函数,所以我们借助KSoap2来达到目的[4],它在资源受到限制的Java环境中应用较多,KSoap2 安卓开发包是一个可以在Android平台上使用的轻量SOAP开发包。

(2) JSON技术。JSON是一种轻量级的、简单的数据存储与交换格式。JSON是一种特殊的JS,它的格式是纯文本的,完全独立于编程语言。JSON之所以是一种很棒的数据交换语言跟这些特性不无关系,它不仅更容易阅读[5],同时更便于机器去解析生成。与XML语言相比较,JSON的扩展性更好。因为JSON在存储JS复合对象方面有绝对优势,所以JSON具有XML无法取代的优势。有效数据率是JSON与XML另外一个不同之处,JSON结构更清晰,冗余更少,不是必须要有严格的闭合标签,所以在网络传输JSON数据包的时候效率更好,减轻了网络传输压力。

2 功能设计

Android客户端有两种开发方案:使用浏览器和开发客户端应用程序。第一种方案直接安装浏览器即可[6],但是由于移动终端设备屏幕尺寸局限,直接使用浏览器,呈现效果受到影响,界面跳转也不是很方便。另外,浏览器的功能有限,无法提供移动学习平台中的各种多媒体交互学习能力。第二种方案需要开发应用程序,可以根据需要量身定做,提供各种音频、视频及更加复杂的交互,使学习者更容易上手,并且提高学习效果。所以本系统采用C/S模式,即采用开发客户端应用程序,服务器端使用IIS作为Web服务器运行Web Service接口,后台数据库采用SQL Server数据库的方案。

2.1设计目标

(1) 设计系统所涉及的功能模型及相应的策略等,设计良好的数据库结构。

(2) 编码实现功能细节并进行大量的功能与性能测试。客户端具体实现视频在线播放、视频评论等功能;服务器端具体设计实现Web Service接口和视频资源的管理功能。

(3) 实现各模块功能后进行项目整合,使得各个模块成为一个整体,并能良好运行。

2.2功能模块

根据功能需求分析,将客户端和服务器端的模块划分如图1所示。

图1 功能模块划分

3 功能实现

3.1Web Service接口实现

微软.NET平台能较好地支持Web Service技术,包括Web Service的构建与使用。与其他开发环境不一样,使用微软.NET平台,开发Web Service项目并不困难,基本不需要再借助其他工具。另外,NET环境操作简单,执行稳定,深受开发人员青睐。 微软.NET框架自身就对Web Service支持的很好。新建Web Service,添加系统所需要的方法,以getVideoPath方法的实现为例,其他方法类似。在WebService.asmx.cs中添加如下代码:

public string getVideoPath (string cId)

{ DataTable dt = new DataTable();

try{

String sql = "select vPath from courseRes where courseId=" + cId;

SqlCommand command = new SqlCommand(sql, sqlCon);

SqlDataAdapter sda = new SqlDataAdapter(command);

sda.Fill(dt);}

catch (Exception e) { }

return JsonConvert.SerializeObject(dt, newDataTableConverter()); } }

在Web Service开放的接口中,有些可以得到一个JSON字符串(比如获取某知识点的相关评论信息),有些可以得到其他非JSON字符串形式的信息(比如修改密码的方法,若成功返回“true”,否则返回“false”)。对于得到的JSON字符串接下来只需要按照一定的规则去解析该字符串,就可以获取相关的数据。

3.2客户端功能实现

下面以“视频在线播放”模块的实现来说明整个功能开发的相关细节。用如图2所示,当该视图被创建后,首先从服务器上获取某课程所有知识点列表,并用ListView控件加以呈现。当点击某个ListViewItem后,程序首先判断有无对应的视频资源,若有则缓冲播放,若无给出友好提示。

“获取知识点”功能是通过在Android中调用我们已经开发好的Web Service接口。在实现该功能时,需要注意一个问题,那就是在安卓4.0版以后,不允许在主线程上进行网络连接,必须另外开辟一个线程。另外Activity里控件相关操作强制放在主线程里。所以,新启动的线程是无法操作它们,也就是说,子线程无法直接访问主线程的界面控件。

图2 视频播放

Handler消息机制可以处理这样的问题。简单来说,Handler就是用来各进程交互数据的处理对象,Handler就像一个纽带。多线程问题解决方案中,我们可以新建一个拥有主线程中的一个Handler的线程,当该线程可以利用Handler向主线程发送数据,主线程收到消息后会进行诸如界面更新之类的相应处理。

Android原生的视频播放方式有三种,分别为:利用Intent调用系统安装的播放器、利用VideoView组件以及利用MediaPlayer类搭配SufferView类。

1) 调用系统安装的播放器。这种方式需要借助于Intent,只要设置好视频路径,系统就会自动检索手机上已安装的视频播放器来播放,参考代码如下:

Uri uri=Uri.parse("视频完整路径");

Intent intent=new Intent(Intent.ACTION_VIEW);

intent.setDataAndType(uri,"video/*");

startActivity(intent);

2) 利用VideoView组件。VideoView是系统封装的用于视频播放的一种组件,其内部使用MediaPlayer类实现,MediaPlayer既能播放视频,又能播放音频。使用时,把VideoView组件布局到文件中,然后再搭配一个为视频播放提供控制条的MediaController对象,设置好VideoView的播放路径,start方法用来播放视频。VideoView的大多数控制功能都已实现,开发效率较高,不足之处是,诸如“视频全屏”等就必须自己实现,该功能可参考如下代码:

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);

//设置相对于父布局四边对齐

lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

lp.addRule(RelativeLayout.ALIGN_PARENT_TOP); lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

//为VideoView添加属性

videoView.setLayoutParams(lp);

在播放视频时,需要一个加载的过程,这个过程我们要进行处理,比如用一个进度条来直观呈现其加载过程,这样利于用户体验,具体实现可以通过为videoView添加OnPrepared监听的方式来实现。

public void onPrepared(MediaPlayer mp) {

//如果文件加载成功,隐藏进度条

progressBar.setVisibility(View.GONE);

}

3) 利用MediaPlayer类搭配SufferView类播放视频。相对于第二种实现方式,这种方式更加灵活,但是实现起来相对也要复杂很多。SurfaceView是View的子类,内嵌了一个surface用于绘制,我们可以设置该surface的样子、大小以及出现的位置。SurfaceView的作用是呈现画面,MediaPlayer来控制视频的播放。

在这种视频播放方式中,“暂停”“播放”“最大化”“进度控制”以及“播放时间显示”等等功能都需要我们自己编写代码实现。篇幅所限,只介绍“视频播放”的核心代码,其他功能的实现不再赘述。

利用MediaPlayer播放视频的核心代码如下:

public void playVideo() {

mediaPlayer = new MediaPlayer();

// 重置mediaPaly,建议在初始滑mediaplay立即调用。

mediaPlayer.reset();

// 设置声音效果

mediaPlayer.setAudioStreamType (AudioManager.STREAM_MUSIC);

// 设置播放完成监听

mediaPlayer.setOnCompletionListener(this);

// 设置媒体加载完成以后回调函数。

mediaPlayer.setOnPreparedListener(this);

// 错误监听回调函数

mediaPlayer.setOnErrorListener(this);

// 设置缓存变化监听

mediaPlayer.setOnBufferingUpdateListener(this);

Uri uri = Uri.parse("视频完整路径");

try {

mediaPlayer.setDataSource(SurfaceViewActivity.this, uri);

//异步加载视频

mediaPlayer.prepareAsync();

} catch (IOException e) {

e.printStackTrace(); }

}

4 功能测试

功能实现完毕,需要对其进行详细测试,需要逐项检查是否达到需求程度。除此之外,我们还需要考虑其性能、安全以及用户体验等诸多方面是否都能满足用户要求。测试过程中,需要选用合适的测试方法来发现隐藏在程序中的漏洞缺陷,根据测试的结果数据来进一步完善,减少功能付诸使用后发生错误的概率。将客户端程序安装在不同型号的Android手机上并进行反复的大量测试,使用效果能达到预期。

5 结语

Android的MediaPlayer类只支持3GP和MP4两种视频格式,所以服务器上的源视频格式就有所限制,这是本功能的局限之处,一种解决方案就是通过架设流媒体服务器解决。基于Android的视频在线播放功能可以促进学习者提高学习效率,这是学习者巩固所学知识的一个很好的辅助手段,它对慕课等移动学习平台的建设具有较好的实用价值。

[1]朱学伟,朱昱,徐小丽. 微信支持下的移动学习平台研究与设计[J]. 中国远程教育,2014(4):77-83.

[2]第37次中国互联网络发展状况调查统计报告[EB/OL] . (2016-01-22)[2016-04-25]. http://www.cnnic.net.cn/hlwfzyj/hlwxzbg/.

[3]柳峰. Android开发之WebService介绍[EB/OL].(2011-05-14)[2016-04-11]. http://blog.csdn.net/lyq8479/article/details/6420398.

[4]柳峰. Android平台调用WebService详解[EB/OL]. (2011-05-18)[2016-4-11]. http://blog.csdn.net/lyq8479/article/details/6428288.

[5]陈玮,贾宗璞. 利用JSON降低XML数据冗余的研究[J].计算机应用与软件,2012,29(9):188-190.

[6]申晋祥,鲍美英. 基于Android的移动在线教育平台的设计与实现[J]. 软件,2016,37(3):30-33.

责任编辑陈桂梅

Design and implementation of the function of playing video online based on Android

GUO Zhongnan

(WuxiMachineryandElectronHigherProfessionalandTechnicalSchool,WuXi214028,China)

With the development of mobile internet and the popularization of smart client, mobile learning has become a new learning mode and app has also become a kind of learning tool. The function of playing video online is a necessary modules for the perfect mobile learning platform. Because of the high market share of the Android system and the young users, the application based on Android is much easier to popularize. This paper analyzes the requirement of the function, introduces the related technology, discusses the details of playing video online on Android system. The function works well in the laboratory environment and has great significance for practical application.

Android; Web Service; JSON; Playing Video Online

2016-05-25

项目来源:江苏省职业技术教育学会立项课题(XHXS2015018);江苏省教育科学研究院现代教育技术研究所立项课题(2015-R-40283)

郭忠南(1980—),男,山东烟台人,讲师,研究方向:软件技术、无线通信技术。

10.13750/j.cnki.issn.1671-7880.2016.05.012

TP 311.1

A

1671-7880(2016)05-0043-04

猜你喜欢

服务器端客户端功能
也谈诗的“功能”
Linux环境下基于Socket的数据传输软件设计
如何看待传统媒体新闻客户端的“断舍离”?
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
关于非首都功能疏解的几点思考
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用