肖羅軍 唐清善
摘要:該文根據(jù)Android系統(tǒng),通過本地服務(wù)器、網(wǎng)絡(luò)通信和視頻播放器等搭建出一個在局域網(wǎng)中,可由客戶端實時控制一個或者多個服務(wù)端的多媒體播放系統(tǒng)。該系統(tǒng)支持客戶端對服務(wù)器的播放狀態(tài)如音量、亮度、色溫、播放內(nèi)容等進行實時控制,支持多種文件類型,支持獨屏播放和分割屏幕播放。該系統(tǒng)中客戶端不僅可以上傳文件到服務(wù)端,還可以下拉服務(wù)端的文件,并且可對上傳文件進行二次編輯。
關(guān)鍵詞:本地服務(wù)器;播控系統(tǒng);分屏播放;局域網(wǎng)
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2019)12-0218-02
1 引言
隨著顯示屏技術(shù)的日益提升和人們對信息傳播速度的需求,多媒體播放在各種公共場合出現(xiàn)率日益增加[1]。在實際需求中,往往需要同時對多個顯示屏進行實時控制,并且希望顯示屏分屏播放不同格式的內(nèi)容,有時還希望對服務(wù)器的資源進行二次編輯[2]。而現(xiàn)存的手機播控系統(tǒng)一部分為固定分屏,無法支持窗口的動態(tài)改變大小和位置,一部分支持窗口的改變,但操作復(fù)雜,缺乏滑動吸附、邊緣對齊等功能[3],并且都存在搜索終端緩慢和無法對服務(wù)器文件的二次編輯[4]。而本文提出的該播控系統(tǒng)解決了以上問題,在客戶端對搜索終端、編輯節(jié)目等功能進行了優(yōu)化,極大提高了從編輯節(jié)目到上傳節(jié)目的效率,并且在服務(wù)端搭建本地服務(wù)器完成客戶端對其的實時控制和二次編輯,提高了該系統(tǒng)的容錯率。
2 系統(tǒng)設(shè)計
本播放系統(tǒng)由客戶端和服務(wù)端組成,客戶端主要有5個功能,分別為編輯節(jié)目、搜索終端、上傳節(jié)目、播放控制和二次編輯;服務(wù)端主要2個功能,分別為網(wǎng)絡(luò)處理模塊和播放,如下圖1。
在該播放系統(tǒng)中不僅保存了傳統(tǒng)的操作方式,還提供了一種新的操作方式,二次編輯型。傳統(tǒng)類型:先編輯節(jié)目,接著再搜索局域網(wǎng)中的服務(wù)端,選擇一個或者多個服務(wù)端將節(jié)目進行上傳,服務(wù)端接受到網(wǎng)絡(luò)請求后,先將節(jié)目在本地進行儲存,然后再根據(jù)節(jié)目中的信息對窗口位置、大小等進行設(shè)置,最后再進行播放。二次編輯型:先搜索終端,接著選擇某個終端的一個節(jié)目,將其下拉到服務(wù)端進行第二次編輯,解決了編輯出錯需重新編輯的問題,并且避免了新的客服端缺乏該節(jié)目中的媒體資源文件而無法編輯問題。
3 客戶端系統(tǒng)改進
3.1 終端搜索
服務(wù)端搭建本地服務(wù)器,并開通8080端口??蛻舳双@取本機IP地址,保留IP地址前24位,將后8位,從00000000至11111111依次取值,再將獲取到256個IP地址依次與客戶端的IP進行socket連接。使用多線程進行socket連接,創(chuàng)建線程池,在線程池中設(shè)置256個核心線程,設(shè)置線程池的容量為256,設(shè)置存活時間為30s,設(shè)置雙端阻塞連接隊列且容量為256,設(shè)置socket的連接時間為1s,且重復(fù)搜索3次。在普通機型上,可將搜索3遍的時間控制在2s左右,且短時間內(nèi)可以多次搜索。
3.2 編輯節(jié)目
3.2.1 節(jié)目構(gòu)成
節(jié)目由本地儲存ID、服務(wù)端儲存ID,名稱、縮略圖、寬、高、一個或者多個窗口構(gòu)成,窗口由x,y(窗口在節(jié)目中的起始坐標)、寬、高、一個或者多個媒體構(gòu)成,媒體由名字、類型、路徑、大小、時長構(gòu)成,媒體類型包括圖片、視頻、文本、時鐘,如下圖所示。
3.2.2 控件實現(xiàn)
節(jié)目的顯示由自定義FrameLayout控件(MyFrameLayout)實現(xiàn)。重寫MyFrameLayout的onInterceptTouchEvent(ev)函數(shù),當節(jié)目中無窗口被選中時,該函數(shù)返回(editFlag)false,MyFrameLayout不處理當前事件,當節(jié)目中有窗口被選中,該函數(shù)返回(editFlag)true,MyFrameLayout處理當前一系列事件。重寫MyFrameLayout的onTouchEvent(ev)函數(shù),當editflag為false時,MyFrameLayout不處理當前事件,事件逐層往下傳遞,媒體控件響應(yīng)該一系列事件中的點擊事件,將該媒體控件選中(editFlag置為true),當editflag置為true時,MyFrameLayout控件攔截傳遞到該控件的所有的事件,根據(jù)事件的時間長短、位置、移動距離等響應(yīng)不同的函數(shù)。
3.2.3 功能實現(xiàn)
動態(tài)大小及位置:選中的媒體控件分為上中、右上、右中、右下、下中、左下、左中、左上、中,九個區(qū)域,當該一系列事件的down事件落在那個區(qū)域時,則由該區(qū)域?qū)@一系列事件進行響應(yīng)。當down事件落在左上區(qū)域時,根據(jù)move事件中x,y的差值,對該媒體控件的left和top值進行動態(tài)變化,當事件落在中間區(qū)域時,則根據(jù)move事件對控件位置進行動態(tài)變化,其他區(qū)域依次類推。當事件落在MyFrameLayout控件中,但事件位置沒有媒體控件時,該事件不予處理,而當事件位置落在其他未選中控件時,點擊事件會改變選中的控件。
邊緣吸附和對齊:提取節(jié)目中所有媒體控件的左上右下坐標,當媒體控件發(fā)生位置變化時,與其他控件的坐標進行比較,當移動控件的左右坐標與其他控件的左坐標或者右坐標,距離在5像素之內(nèi),則會發(fā)生自動靠攏,即邊緣吸附,上下坐標也如此。當移動控件左右坐標與其他控件的左坐標或者右坐標相差在5像素之內(nèi),則會發(fā)生自動對齊,并顯示對齊線段,上下坐標也如此。
3.3 上傳節(jié)目
選擇上傳的一個或者多個終端,獲取上傳節(jié)目中每一個圖片和視頻媒體資源的唯一識別碼(Universally Unique Identifier,簡稱UUID),然后上傳第一個資源UUID,查看服務(wù)端是否已經(jīng)存在該UUID,若存在,說明之前已經(jīng)上傳過該資源,則上傳下一次資源的UUID,若不存在,則上傳該媒體資源,如下圖所示。當上傳多個服務(wù)端時,由于上傳速度的不一致,導(dǎo)致服務(wù)播放的進度有所差異,故在服務(wù)下載節(jié)目完畢后,需反饋給客戶,等待所有服務(wù)端反饋完畢后,客戶端再發(fā)送播放命令。
3.4 控制播放狀態(tài)
選擇一個服務(wù)端進行控制,在進入控制界面前,對服務(wù)端發(fā)送請求設(shè)備當前狀態(tài)的網(wǎng)絡(luò)請求,對客戶的音量、亮度、色溫等進行初始化設(shè)置。改變音量或者亮度等數(shù)值時,實時向服務(wù)端發(fā)送數(shù)據(jù),服務(wù)端收到數(shù)據(jù)后對設(shè)備的狀態(tài)進行改變,返回設(shè)備當前狀態(tài)給服務(wù)端,客戶回收到數(shù)據(jù)后,對音量、亮度、色溫等數(shù)值再次進行設(shè)置,保證客戶和服務(wù)端的數(shù)值是同步。
3.5 二次編輯
選擇客戶端界面中的服務(wù)端節(jié)目列表,客戶端將會下拉該節(jié)目信息,將可再次進入到編輯節(jié)目模塊,對節(jié)目信息進行二次編輯。若沒有添加新的媒體資源,則只需要上傳節(jié)目信息,無須再次上傳資源文件,若添加新的資源文件,也只需要再次上傳新的資源和配置信息。此模塊還支持客戶端將服務(wù)端的節(jié)目下拉,可以下載該節(jié)目中的媒體資源到本地,方便傳輸?shù)讲煌攸c的服務(wù)端。
4 服務(wù)端系統(tǒng)處理
4.1 網(wǎng)絡(luò)處理
導(dǎo)入NanoHTTPD庫,編寫一個新的類AndroidWeb繼承NanoHTTPD類實現(xiàn)本地服務(wù)器。服務(wù)器收到請求后,獲取請求的Uniform Resource Locator(url),將url以“/”進行分割,分割后的第一段為客戶端的IP地址。第二段為請求實現(xiàn)類的方法,在處理請求時將第二段作為反射中方法的填入,從而避免了處理請求的方法過于臃腫。若第二段的值在反射類中無實現(xiàn)方法,說明請求錯誤,返回狀態(tài)碼404。部分網(wǎng)絡(luò)請求有第三段,為處理請求時同一類方法的區(qū)分。在下載過程中,如果下載文件出錯,返回狀態(tài)碼500。下載文件后,對上傳文件進行檢查,若不符合規(guī)格時,則返回狀態(tài)碼406。若處理請求成功,則返回狀態(tài)碼200。
4.2 播放
當客戶端沒有上傳節(jié)目時,服務(wù)端會播放默認畫面,如果上傳節(jié)目,服務(wù)端會切換到上傳節(jié)目進行播放,客戶端也可以選擇上傳的多個節(jié)目中的某一個節(jié)目進行播放。上傳節(jié)目完畢后,主布局mRootLayout會移除之前的控件,判斷上傳節(jié)目中有幾個窗口,再依次添加控件。
在mRoot Layout中添加窗口時,根據(jù)窗口中的參數(shù),對窗口坐標、播放順序、內(nèi)容大小類型等進行設(shè)置,接著再判斷窗口中媒體的類型、入場動畫等,然后根據(jù)媒體類型更新窗口中的控件。媒體中的視頻類型采用Ijkplayer播放器中的播放控件進行播放,其他媒體類型采用自定義控件。
5 系統(tǒng)測試
客戶端編輯節(jié)目,添加多個窗口,對窗口的播放順序、位置、大小類型等進行不同的設(shè)置,接著再往窗口中添加不同的媒體資源,搜索服務(wù)端,上傳節(jié)目,然后再驗證服務(wù)端的播放效果。
6 總結(jié)
該系統(tǒng)達到在局域網(wǎng)內(nèi),服務(wù)端可實時控制多個客戶端的播放,支持不同媒體資源的播放、支持分屏播放、支持二次編輯和支持下載服務(wù)器資源等,且對編輯節(jié)目功能進行優(yōu)化,添加自動吸附、對齊顯示,豐富了播放系統(tǒng)的功能且對操作進行了簡化。如果需要實現(xiàn)超遠距離的控制,則需將局域網(wǎng)接入互聯(lián)網(wǎng),這時對系統(tǒng)的安全性和網(wǎng)絡(luò)通信需要更高的要求。
參考文獻:
[1] 鄭東吉.LED顯示屏技術(shù)分析與產(chǎn)業(yè)發(fā)展研究[J].無線互聯(lián)科技,2017(15):117-118.
[2] 鞠文飛.基于Android平臺的視頻教學平臺的開發(fā)與應(yīng)用[J].信息通信,2018(09):161-163.
[3] 陳龍,任克強.基于Android的手機音視頻播放軟件設(shè)計[J].科技廣場,2017(04):47-49.
[4] 況君.基于Android平臺的手機在線視頻播放系統(tǒng)的設(shè)計和實現(xiàn)[J].無線互聯(lián)科技,2016(05):21-22.
[5] 楊鑫誠.基于IOS的多媒體播放系統(tǒng)設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2012,8(36):8784-8788+8791.
[6] 溫陳鵬,朱宏,李旭偉.基于網(wǎng)絡(luò)的多媒體播放系統(tǒng)[J].計算機與信息技術(shù),2006(09):59-60.
【通聯(lián)編輯:代影】