黑龍江 劉爽
Grilo是一個(gè)致力于簡(jiǎn)化多媒體集成的全新項(xiàng)目。其使用方式非常簡(jiǎn)單常見(jiàn)。Grilo抽象了各個(gè)media provider間的差異,通過(guò)暴露給應(yīng)用開(kāi)發(fā)人員一套單一的高層次的API來(lái)屏蔽所有服務(wù)相關(guān)的細(xì)節(jié),一套系統(tǒng)可以用于所有的媒體服務(wù)和設(shè)備。這顯著地減少了應(yīng)用程序開(kāi)發(fā)端所需要的努力。應(yīng)用開(kāi)發(fā)人員憑借Grilo,只需編碼一次便可以使用所有被Grilo支持的media provider。加上對(duì)多媒體解決方案的熟悉,高層次框架的本質(zhì),大多數(shù)程序員會(huì)感到得心應(yīng)手,并能理解Grilo是如何工作的。
針對(duì)多媒體內(nèi)容集成系統(tǒng)的功能需求,設(shè)立此系統(tǒng)的目的是為加強(qiáng)多媒體消費(fèi)用戶(hù)體驗(yàn),真正做到操作所有多媒體服務(wù)方式一致,對(duì)所有Grilo支持的插件進(jìn)行集中管理。
為了更好的體現(xiàn)本程序功能,編寫(xiě)簡(jiǎn)單的UI模塊供用戶(hù)操作,實(shí)現(xiàn)瀏覽、搜索、播放等功能。主前臺(tái)頁(yè)面采用基于GObject的GTK+圖形庫(kù)編寫(xiě),對(duì)UI執(zhí)行不同的操作來(lái)調(diào)用系統(tǒng)具體的功能模塊。
本系統(tǒng)的主界面主要完成功能是顯示存在當(dāng)前系統(tǒng)中可用的upnp、file system等grilo插件,雙擊某插件即可對(duì)特定媒體服務(wù)進(jìn)行瀏覽操作(遞歸瀏覽文件系統(tǒng)目錄結(jié)構(gòu)),可以按照輸入的特定關(guān)鍵字進(jìn)行搜索匹配的多媒體文件,雙擊列表中出現(xiàn)的多媒體文件可調(diào)用播放器播放媒體內(nèi)容。
當(dāng)控制點(diǎn)定位一個(gè)服務(wù)后他希望了解更多,因而他將請(qǐng)求描述文檔。描述是一個(gè)XML文檔用來(lái)描述一個(gè)設(shè)備,包括:
·制造商信息,版本,其他。
·可被設(shè)備采用的圖標(biāo)的URL地址。
·嵌入式設(shè)備列表。
·設(shè)備提供的服務(wù)列表。
控制點(diǎn)采用基于TCP的HTTP來(lái)請(qǐng)求描述文檔。控制點(diǎn)執(zhí)行標(biāo)準(zhǔn)的HTTPGET命令(與檢索Web頁(yè)面類(lèi)似)。在服務(wù)器端,設(shè)備運(yùn)行一個(gè)標(biāo)準(zhǔn)的HTTP服務(wù)——可以是完全的Web服務(wù)器如Apache也可以是迷你服務(wù)器。描述文檔中的很多條目都是URL地址。這些條目也使用HTTP/TCP檢索。
文件系統(tǒng)插件同樣分為兩個(gè)部分:搜索和瀏覽。
搜索過(guò)程描述:首先初始化起始搜索目錄,當(dāng)用戶(hù)單擊search按鈕時(shí),執(zhí)行搜索操作??傮w思路是遞歸掃面文件系統(tǒng)目錄結(jié)構(gòu),首先獲取初始目錄下所有文件列表,對(duì)這個(gè)子文件鏈表進(jìn)行掃面,一次取出第i個(gè)文件進(jìn)行判斷,如果為媒體文件則調(diào)用回調(diào)函數(shù)來(lái)返回給UI,如果是目錄,則遞歸調(diào)用本模塊。如果不是上述兩種文件,則搜索工作結(jié)束。
瀏覽過(guò)程描述:當(dāng)用戶(hù)雙擊文件系統(tǒng)插件時(shí)執(zhí)行瀏覽操作,從根目錄“/”開(kāi)始,當(dāng)用戶(hù)雙擊列表中某目錄時(shí),通過(guò)傳遞給模塊相應(yīng)的目錄id來(lái)執(zhí)行瀏覽操作,首先獲取當(dāng)前目錄下所有的文件列表,掃面鏈表,對(duì)每個(gè)元素進(jìn)行判斷,如果是目錄文件或者是媒體文件,則將其元數(shù)據(jù)信息封裝成GrlMedia或者GrlMediaContainer,進(jìn)一步調(diào)用回調(diào)函數(shù)將結(jié)果返回給UI。
通過(guò)局域網(wǎng)主機(jī)模擬Internet中多媒體服務(wù)器工作,意在說(shuō)明Grilo框架的通用性,并不僅限于本系統(tǒng)中使用的前兩個(gè)插件。
使用Gtk+調(diào)用GNOME開(kāi)源的多媒體播放器Totem,它基于Gstreamer,Gstreamer設(shè)計(jì)原理來(lái)自 windows的 DirectShow,GStreamer作為GNOME桌面環(huán)境推薦的流媒體應(yīng)用框架,采用了基于插件(plugin)和管道(pipeline)的體系結(jié)構(gòu),庫(kù)中的所有的功能模塊都被實(shí)現(xiàn)成可以插拔的組件(component),并且在需要的時(shí)候能夠很方便地安裝到任意一個(gè)管道上,由于所有插件都通過(guò)管道機(jī)制進(jìn)行統(tǒng)一的數(shù)據(jù)交換,因此,很容易利用已有的各種插件“組裝”出一個(gè)功能完善的多媒體應(yīng)用程序。通過(guò)編寫(xiě)支持不同格式的插件插入到管道中,使編寫(xiě)一個(gè)萬(wàn)能的播放器成為可能。
目前,基于Grilo的多媒體集成系統(tǒng)還不完善,還有很多不成熟的地方。將在以下幾個(gè)方面開(kāi)展進(jìn)一步的完善工作。
第一方面:進(jìn)一步明確系統(tǒng)的需求分析。需求分析過(guò)程中可能存在著一些不足,將在后期系統(tǒng)完善中對(duì)存在的問(wèn)題進(jìn)行修改。
第二方面:系統(tǒng)界面不夠美觀。系統(tǒng)首先進(jìn)行后臺(tái)模塊的設(shè)計(jì)和開(kāi)發(fā),對(duì)前臺(tái)的顯示效果沒(méi)有考慮周全。將在界面布局等方面對(duì)系統(tǒng)進(jìn)行完善,今后可能考慮替換其他可移植的圖形庫(kù),clutter等。
第三方面:因?yàn)橄到y(tǒng)所采用的技術(shù)基于glib和gobject,所以充分保證了系統(tǒng)代碼的跨平臺(tái)特性,目前系統(tǒng)運(yùn)行平臺(tái)為ubuntu11.04,今后在改進(jìn)UI后可以移植本系統(tǒng)到其他平臺(tái)(Windows、Mac OSX、Android等)。
[1]肖文鵬.自由軟件愛(ài)好者用GStreamer簡(jiǎn)化Linux多媒體開(kāi)發(fā),2004~6.01.P1~5.
[2]The GNOME Project, Grilo Reference Manual.P1~10.
[3]Eric Harlow著,童壽彬,童悅,等譯 Developing linux Application with GTK+and GDK.1999.P66~68.
[4]王保保,陶鵬.UPnPAV架構(gòu)的數(shù)字多媒體家庭網(wǎng)絡(luò).微電子學(xué)與計(jì)算機(jī),2006,23(7):126~134.
[5]范新運(yùn).基于UPnP的家庭智能系統(tǒng)研究與實(shí)踐:[碩士學(xué)位論文].西安:西北工業(yè)大學(xué)圖書(shū)館,2005.