馬顏軍
(遼寧警察學(xué)院 遼寧 116036)
YouTube是目前世界上最大最流行的視頻分享站點,該站點每天增加幾十億個頁面視圖和數(shù)十萬個視頻文件。它不僅給用戶提供大量豐富的視頻內(nèi)容,還允許用戶在任何時刻任何地點上傳自己的視頻[1]。
YouTube的另一個重要的特點是它提供數(shù)據(jù)API和播放器API。通過數(shù)據(jù)API,開發(fā)者可以將 YouTube 的功能整合到自己開發(fā)的應(yīng)用中,并且可以執(zhí)行搜索、上傳視頻、創(chuàng)建播放列表等更多操作。通過播放器API,可以對YouTube視頻播放進行控制,可以設(shè)置播放器界面,甚至構(gòu)建自己的播放器控件[2]。
本文主要研究YouTube數(shù)據(jù)API在Android系統(tǒng)中的應(yīng)用,研究如何通過YouTube數(shù)據(jù)API 訪問視頻內(nèi)容,并將訪問的內(nèi)容集成到Android系統(tǒng)的應(yīng)用中,實現(xiàn)視頻元內(nèi)容顯示、關(guān)鍵字檢索等功能。
YouTube數(shù)據(jù)API是用來獲取YouTube視頻數(shù)據(jù)的,在研究YouTube數(shù)據(jù)API在Android系統(tǒng)中的應(yīng)用之前,需要先了解一下YouTube數(shù)據(jù)API返回的視頻數(shù)據(jù)格式。
YouTube數(shù)據(jù)API返回一個包含多個視頻元數(shù)據(jù)的綱要。其中,每個視頻元都是一個 Atom 供稿,該供稿的根標記是
YouTube數(shù)據(jù)API是一種基于REST的服務(wù),YouTube數(shù)據(jù)API作為客戶端首先向服務(wù)器發(fā)送一個指定資源的HTTP請求。這個HTTP請求類似于一個查詢語句,而且具有一個或多個輸入?yún)?shù)。服務(wù)器收到該請求后,使用Atom或RSS格式響應(yīng)并回復(fù)該查詢,該響應(yīng)可以在支持 XML的任何客戶端內(nèi)進行解析[1]。
基于上面的原理,使用YouTube數(shù)據(jù)API時,一個重要的部分就是如何構(gòu)造HTTP請求。由于YouTube數(shù)據(jù)API可以獲取標準視頻供稿和指定視頻供稿的視頻,所以根據(jù)獲取的視頻供稿類型的不同,HTTP請求構(gòu)造分為標準視頻供稿請求和指定視頻供稿請求。
標準視頻供稿是包含YouTube 用戶行為的視頻列表(例如評分最高的視頻供稿和觀看次數(shù)最多的視頻供稿),或者是由YouTube官方挑選的視頻列表(例如近期精選視頻供稿),許多此類供稿均顯示在YouTube 官方的視頻標簽頁中。YouTube 每隔幾分鐘就會更新一次標準供稿[2]。
標準視頻供稿請求中,供稿ID為top_rated、top_favorites、most_viewed、most_discussed 和 most_responded的標準供稿均支持time參數(shù)。通過此參數(shù)可以獲取僅包含前一天、前一周、前一個月的相關(guān)視頻。例如,檢索前一天評分最高的視頻列表的HTTP請求為http://gdata.youtube.com/feeds/api/standardfeed s/top_rated?time=today。
標準視頻供稿還支持通過指定regionID獲取指定區(qū)域、指定類別的視頻。例如,獲取臺灣地區(qū)評分最高的喜劇列表的H TTP請求為 http://gdata.youtube.com/feeds/api/standardfeeds/T W/top_rated_Comedy。如果HTTP請求中指定了regionID,那么指定的類別在相應(yīng)的指定區(qū)域中必須是能夠瀏覽的。例如,開發(fā)者可以構(gòu)造在臺灣評分最高的新聞視頻供稿的請求,因為“新聞”在臺灣是可以瀏覽的類別。但是,無法構(gòu)造在美國評分最高的新聞視頻的請求,因為“新聞”在美國是不可瀏覽的類別。
指定視頻供稿請求是開發(fā)者自定義條件的視頻供稿請求。開發(fā)者在YouTube提供的查詢參數(shù)范圍內(nèi),按照固定的格式和自定義的參數(shù),構(gòu)造HTTP請求,獲取想要的視頻供稿。
指定視頻供稿請求的格式,前端固定為 http://gdata.youtube.com/feeds/api/videos,請求后面的內(nèi)容需要開發(fā)者自定義參數(shù)[2]。比如,想獲取視頻標題中包含basketball的視頻集,可以利用 q參數(shù)構(gòu)造 HTTP請求 http://gdata.youtube.com/feeds/api/videos?q=basketball。
此外,開發(fā)者還可以在請求中增加start-index 參數(shù)指定獲取視頻的開始偏移量,max-results參數(shù)指定獲取的視頻最大數(shù),此參數(shù)與start-index參數(shù)結(jié)合使用,可確定視頻集返回的結(jié)果。Orderby參數(shù)用于對搜索結(jié)果集中的視頻進行排序,此參數(shù)的有效值包括 published(發(fā)布時間)、viewCount(觀看次數(shù))和 r ating(評價)。例如,HTTP請求http://gdata.youtube.com/feed s/api/videos?q=football &orderby=published&start-index=11&ma x-results=10獲取的是視頻標題中含有 football,而且按照發(fā)布時間排序后,從第11個視頻開始的10個視頻集。
通過以上對YouTube數(shù)據(jù)API的研究,可以將這些內(nèi)容應(yīng)用到Android系統(tǒng)的應(yīng)用開發(fā)中,開發(fā)YouTube應(yīng)用的客戶端。
Android系統(tǒng)是一個基于Linux核心的開放的操作系統(tǒng),A ndroid在采用Linux核心的基礎(chǔ)上,提供了各種函數(shù)庫,以及一個完整的應(yīng)用程序框架。它提供Google自制的應(yīng)用程序運行環(huán)境(Dalvik),并提供基于 Eclipse集成開發(fā)環(huán)境的免費、跨平臺(w indows、Mac、Linux)開發(fā)工具(SDK),這使得開發(fā)人員很容易在Android平臺上開發(fā)各種應(yīng)用[3]。
Android系統(tǒng)結(jié)構(gòu)分為四層,從高到低分別是應(yīng)用層、應(yīng)用框架層、系統(tǒng)運行庫層、Linux內(nèi)核層。應(yīng)用層是運行在虛擬機上的程序;應(yīng)用框架層是Google的核心應(yīng)用使用的框架;系統(tǒng)運行庫層是Android提供的一些支持各個組件的C/C++庫;L inux內(nèi)核層包含了安全性、內(nèi)存管理、進程管理、驅(qū)動模型、網(wǎng)絡(luò)協(xié)議棧等,同時也作為硬件和軟件棧的抽象層[4]。
利用YouTube數(shù)據(jù)API開發(fā)的YouTube應(yīng)用組入Android系統(tǒng)后的系統(tǒng)結(jié)構(gòu)圖,如圖1。YouTube應(yīng)用通過YouTube數(shù)據(jù)API訪問YouTube云端數(shù)據(jù),在Android端實現(xiàn)視頻顯示、檢索、播放控制等功能。
在Android系統(tǒng)中利用YouTube數(shù)據(jù)API開發(fā)的客戶端應(yīng)用代碼量大,由于篇幅限制,只列出了使用YouTube數(shù)據(jù)API的主要代碼。
獲取YouTube數(shù)據(jù)情報的部分主要代碼如下。
獲取YouTube搜索情報的部分主要代碼如下。
獲取YouTube詳細情報的部分主要代碼如下。
本文對YouTube數(shù)據(jù)API進行了深入研究,包括YouTube數(shù)據(jù)API提供的視頻元格式、使用YouTube數(shù)據(jù)API時HTTP請求的種類,以及HTTP請求的構(gòu)造方法,最后將YouTube數(shù)據(jù)API應(yīng)用到Android系統(tǒng)中,開發(fā)了YouTube的客戶端應(yīng)用。
[1]Vikram Vaswani.IBM developerW orks:結(jié)合使用 YouTube API 和 PHP.
[2]Google Developers.https://developers.google.com/youtube/ge tting_started?hl=zh-cn#data_api
[3]蓋索林,王世江.Android開發(fā)入門指南(第二版)[M].人民郵電出版社,2009.
[4]楊豐盛.Android應(yīng)用開發(fā)揭秘[M].機械工業(yè)出版社,2011.