手機Android音視訊採集與直播推送
恰逢2014 Google I/O大會,不難看出安卓在Google的推進以及本身的開放性作用下,已經快延生到生活的
各個方面了,從安卓智慧手機、平板,到可穿戴的Android Ware、眼鏡、手錶、再到Android汽車、智慧家
居、電視,甚至最近看新聞,日本出的幾款機器人都是Android系統的,再把目光放回監控行業,傳統監控
中的移動終端裝置,例如:單兵裝置、手持裝置、車載終端裝置,包括家庭監控中用到的智慧裝置,都可以
用Android系統替代了,不僅開發容易,而且易擴充套件,裝置也更加智慧了。
圖 - Android在手持裝置中的應用
一步一步來,我們先實現Android手機的音視訊採集與上傳的實時監控功能。Google Code上有一個開源項
目:
能類似於一般的IpCamera,既能夠通過網頁訪問攝像機並修改監控配置,還能通過http或者rtsp協議,獲取
監控的實時音視訊,而且從其程式碼結構中,可以看出,spydroid已經實現了RTSPServer、RTSPClient、
RTP、RTCP、H264、AAC…等等功能,總之,咱們需要的Utility都已經具備了,只要將這些功能組合到一塊
就能實現咱們要的直播需求了。
圖 - Android實現IPCamera的功能
在之前的部落格“
樣,我們參考EasyIpCamera的設計方法,App啟動後,連線並保活至中心管理伺服器,接收來自CMS的控
制命令。採集安卓攝像頭視訊和mic聲音,進行H264和AAC編碼(這裡我們只參考spydroid實現了硬編碼,
軟編碼在後續中將會更新進來,不過經過嘗試,目前大部分Android音視訊採集都支援硬編碼),再通過
RTSP和RTP,將實時音視訊資料推送到流媒體伺服器,並由流媒體伺服器進行轉發和分發,實現直播。
圖 - Android接入EasyDSS
這裡主要就是RTSP/RTP的推送過程,這個在之前的部落格“
描述了這個過程,具體的推送程式碼也可以參考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