羅玉萍 王振皆 王瑩

摘? 要:在物聯網與消費電子急速發展的過程中,越來越多的同屏器出現在我們的視野中。本文研究的是基于Linux系統的同屏器是如何通過USB數據線獲取Android系統的視頻流,從而實現同步播放的功能,并對其中涉及到的screenrecord截屏技術、ADB技術、libusb技術、alsa聲卡技術、AOA技術進行探究。
關鍵詞:消費電子;同屏器;視頻流
中圖分類號:TP316? ? ? 文獻標識碼:A 文章編號:2096-4706(2019)15-0015-03
Research on the Implementation of Wired and Same Screen Technology in
Linux and Android Systems
LUO Yuping,WANG Zhenjie,WANG Ying
(Guangzhou Hangxin Aviation Technology Co.,Ltd.,Guangzhou? 510663,China)
Abstract:In the rapid development of IoT and consumer electronics,more and more simultaneous screen appear in our field of vision. This paper studies how the simultaneous screen based on Linux system obtains the video stream of Android system through USB data cable,so as to realize the function of synchronous playback,and explores the screenrecord screenshot technology,ADB technology,libusb technology,alsa sound card technology and AOA technology involved in it.
Keywords:consumer electronics;simultaneous screen;video stream
0? 引? 言
近年來,隨著智能手機的爆炸式增長,無線同屏技術也緊跟其后。目前基本上所有新版的Android手機系統都自有DLNA、Miracast同屏協議,蘋果手機自有AirPlay協議。作為一項新一代的無線同屏技術,無疑對Wi-Fi的帶寬和穩定性都有極大的要求,并且其成本較高,于是在市場的推動下,USB有線同屏技術應運而生,從而解決了無線同屏過程中存在的弊端。由于成本較低,操作簡單,后續發展過程中有線同屏器也廣受消費者的青睞。
1? 基于Linux系統的有線同屏器介紹
1.1? USB有線同屏器的概念
同屏器就是把手機、平板和電腦上的圖片、視頻、音樂等推送到顯示屏(電視機、投影儀等)上播放,實現小屏到大屏的一個過程。簡單來說,同屏器就是手機、平板端投影到大屏幕的轉換設備,相當于一塊“放大鏡”,無論在家庭、教育、會議上應用都是非常廣泛的。在家里,只需要一根數據線,就可以將手機的內容分享到電視上,家人一起觀看,其樂融融;在課堂上,老師可以將課件推送到大屏幕上,實現課件的分享,有效地提高上課效率;在會議上也一樣,甚至可以投成多分屏,實現多個內容同時分享,簡單方便。
1.2? USB有線同屏器的實現框架
USB同屏操作簡單,即插即用,成本低、幾乎實現零延時。USB有線同屏器實現同屏過程需以下設備:Android設備、USB設備、Linux設備(同屏器)、顯示設備。Android設備與Linux設備通過USB數據線連接,最后輸送到顯示設備顯示,如圖1所示。其中,Android與Linux設備之間要解決視頻流問題需要解決五大技術問題:screenrecord技術、ADB技術、libusb技術、alsa聲卡驅動技術、AOA技術。
對于大部分開發者來說,之前都有屬于自己的一套比較成熟的代碼框架,然后再在其基礎上添加所需模塊,這樣開發速度會極大地縮短。像這個同屏器,如果前期設備已經帶有成熟USB開發模塊,其他模塊的添加和測試就會相對容易。
2? USB有線同屏器核心技術
2.1? screenrecord截屏技術
screenrecord是Android系統的一個shell命令,如何能讓screenrecord在Linux系統上運行,是首先必須要解決的問題。這就需要在Ubuntu下對Android源碼進行修改、編譯及運行。這個工作量也不小,首先是要修改環境變量,編譯工具鏈,讓這個源碼能正常通過。其實說到底,就是為了能夠在Linux環境下使用screenrecord程序,以至達到錄屏的效果。screenrecord可能會遇到有些設備可能無法直接錄制,原因是分辨率太高,如果遇到此類問題,請試著指定較低的分辨率。雖然Android是開源的,但是對于Android系統不同品牌商都會對其定制一些內容,不是所有的都通用,這個就需要開發者去手動修改獲取手機的分辨率。另外一個比較突出的問題就是錄制視頻的時候聲音不會被錄下來,這就是后面講到的必須要用alsa-lib庫將Android聲音做傳輸。
2.2? ADB技術
ADB的全稱是Android Debug Bridge,簡單地來說,它是Android SDK中的一個工具。使用ADB可以直接操作管理Android模擬器或者真實的Andriod設備。ADB的主要功能有:(1)在Android設備上運行Shell(命令行);(2)管理模擬器或設備的端口映射;(3)在計算機和設備之間上傳和下載文件;(4)將電腦上的本地apk軟件安裝至Android模擬器或設備上。
ADB在同屏器上的運行原理是同屏器端的adb server與手機端的守護進程adbd建立連接,然后同屏器端的adb client通過adb server轉發命令,ADB接收命令后解析運行。
ADB是一個C/S架構的應用程序,由三部分組成:(1)運行在同屏器端的adb client;(2)運行在同屏器端的adb server;(3)運行在設備端的常駐進程adb demon。
對于開發者來說,一旦完成ADB程序在Linux的移植,就可以用命令去和手機端建立連接,監聽手機端的數據。這個步驟就基本完成了。
2.3? libusb技術
libusb設計了一系列的外部API為應用程序所調用,通過這些API應用程序可以直接操作硬件。從libusb的源代碼可以看出,這些API調用了內核的底層接口,和kernel driver中所用到的函數所實現的功能差不多,只是libusb更加接近USB規范,使得libusb的使用也比開發內核驅動相對容易的多。總的來說,使用libusb開發庫可以很方便的與USB通信。在使用這個庫之前需要做幾件事情:(1)libusb的安裝。在ubuntu中使用sudo apt-get isntall libusb*可以快速的安裝,無論什么方法,最后能安裝成功就行;(2)確定供應商ID和產品ID,通過這兩個ID可以確定我們的USB設備使用lsusb命令查看,然后使用libusb-v查看具體信息,這兩個ID經常要用到;(3)確定傳輸方式、輸入端點、輸出端點。
2.4? alsa聲卡驅動技術
alsa是Linux下的一個聲卡驅動,它是一個完全開放源代碼的音頻驅動程序集,除了像OSS那樣提供了一組內核驅動程序模塊之外,alsa還專門為簡化應用程序的編寫提供了相應的函數庫,與OSS提供的基于ioctl的原始編程接口相比,alsa函數庫使用起來要更加方便一些。
alsa的主要特性包括:高效地支持從消費類入門級聲卡到專業級音頻設備所有類型的音頻接口,完全模塊化的設計,支持對稱多處理(SMP)和線程安全,對OSS的向后兼容,以及提供了用戶空間的alsa-lib庫來簡化應用程序的開發。
對于一個應用程序開發者,或者嵌入式應用開發者來說,接觸到主要是alsa-lib編譯出來的庫libasound。alsa在移植過程中難點是要結合自身設備的USB Audio Driver去修改,一旦完成,將會事半功倍。
2.5? AOA技術
在同屏器中Android與USB的通信方式是基于AOA協議實現的,這種方式也稱為配件模式。此模式下,與Android終端通信的另一端設備稱為Android配件。在USB通信中,Android終端充當USB從機,Android配件(即同屏器)充當USB主機。
在同屏器中運用到AOA協議的其一功能:音頻是否支持從配件輸出,即從Android設備輸出到同屏器。所以開發者只需要根據協議內容去判斷Android手機的聲音是否支持從同屏器輸出即可。
3? 解決同步技術策略
3.1? 同屏過程解決卡頓丟幀對策
當我們按著框架流程走的時候,我們會發現總會存在這樣或者那樣的問題,而這個同屏器在實現過程中,比較常見的問題是視頻卡頓。而導致視頻卡頓的原因大致有以下三種:(1)軟件編碼和壓縮算法不先進;(2)硬件性能不夠,導致無法快速處理數據流;(3)數據傳輸環境影響。
解決方案:(1)現在基本上都是用H.264協議進行編解碼,使用H.264協議對編解碼算法要求相對較高,對視頻的損傷也較大。如果要追求流暢度,則勢必要犧牲畫質的清晰度,提高壓縮比,從而導致傳輸數據量增大,引起卡頓。所以開發者必須清楚的計算,把清晰度保持在合理范圍,而且也能保證流暢度;(2)硬件性能不夠這個是硬性條件,一般在前期規劃的時候就已經研究好了,出現這種情況的機會相對較小。其實硬件條件就是性能和成本之間的衡量;(3)數據傳輸環境的影響是最大的,也是比較主觀的一方面。因使用的USB 2.0傳輸協議,傳輸速率基本上已經極高了,性能也穩定。對不同開發者來說,如何調整視頻流的質量和速率,這是體現技術能力的關鍵一步,只有協調好才能達到最佳效果。
3.2? 同屏過程縮短latency對策
同屏最佳效果就是要達到手機屏幕和輸出的大屏幕實現零延時,這樣消費者無論是觀看影片或者是玩游戲,都能有最佳的體驗。在所有硬件條件都滿足的情況下,可嘗試改善latency的方法有以下幾種:(1)在不超限的情況下,提高CPU或者DDR的頻率,即提高CPU處理能力;(2)試著降低分辨率,即減少要處理的數據量;(3)加大視頻流的傳輸速率,縮短延時,比如設置的默認是3M/s,可以提高至6M/s試試。
當然,不是所有的方法都是一蹴而就的,而是需要開發者不斷去嘗試,找到一個最佳值。latency為500ms,當你在玩游戲的時候就會發現有些不同步了,一旦降到5ms,基本上無任何阻礙的感覺,順暢無比。
4? 結? 論
本文是對基于Linux系統的USB有線同屏技術在Android設備運用的講述,包括其功能展示,實現原理,流程框圖,模塊的組成,知識點的整合,重點難點及解決方法。雖然同屏器涉及到的技術點不是特別多,但是真正做到穩定性好、性能強大很難。同屏器目前的市場很大,很多項目管理者都是急匆匆的完成其功能,并沒有對其進行深一步的優化,所以出現的問題也很多。希望管理者在部署、規劃項目時,能多關注細節問題,從用戶的角度出發,解決存在的問題,使用戶的體驗更好。
參考文獻:
[1] 邊海龍,賈少華.USB 2.0設備的設計與開發 [M].北京:人民郵電出版社,2004.
[2] 工業和信息化部人才交流中心,恩智浦(中國)管理有限公司.微控制器USB的信號和協議實現 [M].北京:電子工業出版社,2018.
[3] 張大偉.深入理解Android 卷Ⅲ [M].北京:機械工業出版社,2015.
作者簡介:羅玉萍(1988.06-),女,漢族,廣東湛江人,嵌入式軟件工程師,工學學士,研究方向:信息工程。