1. 程式人生 > >手機Android音視訊採集與直播推送

手機Android音視訊採集與直播推送

恰逢2014 Google I/O大會,不難看出安卓在Google的推進以及本身的開放性作用下,已經快延生到生活的 
各個方面了,從安卓智慧手機、平板,到可穿戴的Android Ware、眼鏡、手錶、再到Android汽車、智慧家 
居、電視,甚至最近看新聞,日本出的幾款機器人都是Android系統的,再把目光放回監控行業,傳統監控 
中的移動終端裝置,例如:單兵裝置、手持裝置、車載終端裝置,包括家庭監控中用到的智慧裝置,都可以 
用Android系統替代了,不僅開發容易,而且易擴充套件,裝置也更加智慧了。

 
圖 - Android在手持裝置中的應用

一步一步來,我們先實現Android手機的音視訊採集與上傳的實時監控功能。Google Code上有一個開源項 
目:

spydroid-ipcamera,spydroid能在Android手機中建立一個精簡的HTTP Server和RTSP Server,功 
能類似於一般的IpCamera,既能夠通過網頁訪問攝像機並修改監控配置,還能通過http或者rtsp協議,獲取 
監控的實時音視訊,而且從其程式碼結構中,可以看出,spydroid已經實現了RTSPServer、RTSPClient、 
RTP、RTCP、H264、AAC…等等功能,總之,咱們需要的Utility都已經具備了,只要將這些功能組合到一塊 
就能實現咱們要的直播需求了。

這裡寫圖片描述 
圖 - Android實現IPCamera的功能

在之前的部落格“

基於Darwin實現的分散式流媒體直播伺服器系統”中,我們用Windows的攝像頭和麥克風 
樣,我們參考EasyIpCamera的設計方法,App啟動後,連線並保活至中心管理伺服器,接收來自CMS的控 
制命令。採集安卓攝像頭視訊和mic聲音,進行H264和AAC編碼(這裡我們只參考spydroid實現了硬編碼, 
軟編碼在後續中將會更新進來,不過經過嘗試,目前大部分Android音視訊採集都支援硬編碼),再通過 
RTSP和RTP,將實時音視訊資料推送到流媒體伺服器,並由流媒體伺服器進行轉發和分發,實現直播。

這裡寫圖片描述
圖 - Android接入EasyDSS

這裡主要就是RTSP/RTP的推送過程,這個在之前的部落格“

基於DSS的先偵聽後推送式流媒體轉發”中詳細 
描述了這個過程,具體的推送程式碼也可以參考live555的DarwinInjector類實現,咱們這裡直接修改 
spydroid中的RTSPClient就可以實現ANNOUNCE/SETUP/PLAY/RTP過程了,具體流程原始碼及協議流程 
也可以參考“用Darwin和live555實現的直播框架”中的描述。

使用方法與部落格“基於Darwin實現的分散式流媒體直播伺服器系統”中EasyIpCamera的方法一致,只需要 
配置EasyDSS伺服器CMS的地址和埠號,就可以接入到EasyDSS,後續所有流程與EasyIpCamera類似, 
只有當有客戶端請求實時視訊的時候才會推送音視訊流,其他情況只與CMS連線保活,流媒體處於Idle狀 
態。

這裡寫圖片描述 
圖 - Android採集端配置介面

實時效果:經過測試對吧,延時性與網路和手機的相關性很大,不同網路條件,不同手機硬體,可能對比出 
的延時效果不一樣,用三星Glaxy3手機,在網路情況比較好的情況下,實時音視訊的延時大概在1.3s(公網 
傳輸)左右:

這裡寫圖片描述

圖 - 連續測試2’52’,延時1.35s

這裡寫圖片描述

圖 - 連續測試9’17”,延時1.58s