马颜军
(辽宁警察学院 辽宁 116036)
YouTube是目前世界上最大最流行的视频分享站点,该站点每天增加几十亿个页面视图和数十万个视频文件。它不仅给用户提供大量丰富的视频内容,还允许用户在任何时刻任何地点上传自己的视频[1]。
YouTube的另一个重要的特点是它提供数据API和播放器API。通过数据API,开发者可以将 YouTube 的功能整合到自己开发的应用中,并且可以执行搜索、上传视频、创建播放列表等更多操作。通过播放器API,可以对YouTube视频播放进行控制,可以设置播放器界面,甚至构建自己的播放器控件[2]。
本文主要研究YouTube数据API在Android系统中的应用,研究如何通过YouTube数据API 访问视频内容,并将访问的内容集成到Android系统的应用中,实现视频元内容显示、关键字检索等功能。
YouTube数据API是用来获取YouTube视频数据的,在研究YouTube数据API在Android系统中的应用之前,需要先了解一下YouTube数据API返回的视频数据格式。
YouTube数据API返回一个包含多个视频元数据的纲要。其中,每个视频元都是一个 Atom 供稿,该供稿的根标记是
YouTube数据API是一种基于REST的服务,YouTube数据API作为客户端首先向服务器发送一个指定资源的HTTP请求。这个HTTP请求类似于一个查询语句,而且具有一个或多个输入参数。服务器收到该请求后,使用Atom或RSS格式响应并回复该查询,该响应可以在支持 XML的任何客户端内进行解析[1]。
基于上面的原理,使用YouTube数据API时,一个重要的部分就是如何构造HTTP请求。由于YouTube数据API可以获取标准视频供稿和指定视频供稿的视频,所以根据获取的视频供稿类型的不同,HTTP请求构造分为标准视频供稿请求和指定视频供稿请求。
标准视频供稿是包含YouTube 用户行为的视频列表(例如评分最高的视频供稿和观看次数最多的视频供稿),或者是由YouTube官方挑选的视频列表(例如近期精选视频供稿),许多此类供稿均显示在YouTube 官方的视频标签页中。YouTube 每隔几分钟就会更新一次标准供稿[2]。
标准视频供稿请求中,供稿ID为top_rated、top_favorites、most_viewed、most_discussed 和 most_responded的标准供稿均支持time参数。通过此参数可以获取仅包含前一天、前一周、前一个月的相关视频。例如,检索前一天评分最高的视频列表的HTTP请求为http://gdata.youtube.com/feeds/api/standardfeed s/top_rated?time=today。
标准视频供稿还支持通过指定regionID获取指定区域、指定类别的视频。例如,获取台湾地区评分最高的喜剧列表的H TTP请求为 http://gdata.youtube.com/feeds/api/standardfeeds/T W/top_rated_Comedy。如果HTTP请求中指定了regionID,那么指定的类别在相应的指定区域中必须是能够浏览的。例如,开发者可以构造在台湾评分最高的新闻视频供稿的请求,因为“新闻”在台湾是可以浏览的类别。但是,无法构造在美国评分最高的新闻视频的请求,因为“新闻”在美国是不可浏览的类别。
指定视频供稿请求是开发者自定义条件的视频供稿请求。开发者在YouTube提供的查询参数范围内,按照固定的格式和自定义的参数,构造HTTP请求,获取想要的视频供稿。
指定视频供稿请求的格式,前端固定为 http://gdata.youtube.com/feeds/api/videos,请求后面的内容需要开发者自定义参数[2]。比如,想获取视频标题中包含basketball的视频集,可以利用 q参数构造 HTTP请求 http://gdata.youtube.com/feeds/api/videos?q=basketball。
此外,开发者还可以在请求中增加start-index 参数指定获取视频的开始偏移量,max-results参数指定获取的视频最大数,此参数与start-index参数结合使用,可确定视频集返回的结果。Orderby参数用于对搜索结果集中的视频进行排序,此参数的有效值包括 published(发布时间)、viewCount(观看次数)和 r ating(评价)。例如,HTTP请求http://gdata.youtube.com/feed s/api/videos?q=football &orderby=published&start-index=11&ma x-results=10获取的是视频标题中含有 football,而且按照发布时间排序后,从第11个视频开始的10个视频集。
通过以上对YouTube数据API的研究,可以将这些内容应用到Android系统的应用开发中,开发YouTube应用的客户端。
Android系统是一个基于Linux核心的开放的操作系统,A ndroid在采用Linux核心的基础上,提供了各种函数库,以及一个完整的应用程序框架。它提供Google自制的应用程序运行环境(Dalvik),并提供基于 Eclipse集成开发环境的免费、跨平台(w indows、Mac、Linux)开发工具(SDK),这使得开发人员很容易在Android平台上开发各种应用[3]。
Android系统结构分为四层,从高到低分别是应用层、应用框架层、系统运行库层、Linux内核层。应用层是运行在虚拟机上的程序;应用框架层是Google的核心应用使用的框架;系统运行库层是Android提供的一些支持各个组件的C/C++库;L inux内核层包含了安全性、内存管理、进程管理、驱动模型、网络协议栈等,同时也作为硬件和软件栈的抽象层[4]。
利用YouTube数据API开发的YouTube应用组入Android系统后的系统结构图,如图1。YouTube应用通过YouTube数据API访问YouTube云端数据,在Android端实现视频显示、检索、播放控制等功能。
在Android系统中利用YouTube数据API开发的客户端应用代码量大,由于篇幅限制,只列出了使用YouTube数据API的主要代码。
获取YouTube数据情报的部分主要代码如下。
获取YouTube搜索情报的部分主要代码如下。
获取YouTube详细情报的部分主要代码如下。
本文对YouTube数据API进行了深入研究,包括YouTube数据API提供的视频元格式、使用YouTube数据API时HTTP请求的种类,以及HTTP请求的构造方法,最后将YouTube数据API应用到Android系统中,开发了YouTube的客户端应用。
[1]Vikram Vaswani.IBM developerW orks:结合使用 YouTube API 和 PHP.
[2]Google Developers.https://developers.google.com/youtube/ge tting_started?hl=zh-cn#data_api
[3]盖索林,王世江.Android开发入门指南(第二版)[M].人民邮电出版社,2009.
[4]杨丰盛.Android应用开发揭秘[M].机械工业出版社,2011.