周 翔,俞 鑫,張 霞,包 瑜,楊海波,潘培森
Android平臺下基于RTSP的移動直播系統(tǒng)設(shè)計
周 翔,俞 鑫,張 霞,包 瑜,楊海波,潘培森
(南通億榮網(wǎng)絡(luò)科技有限公司 研發(fā)部,江蘇 南通 226000)
以RTSP/RTP協(xié)議為基礎(chǔ),采用OKHttp進行網(wǎng)絡(luò)數(shù)據(jù)傳輸,研制了Android平臺下基于Rtsp的移動直播系統(tǒng)。該系統(tǒng)采用FFMpeg庫并結(jié)合JNI技術(shù)實現(xiàn)音視頻的編解碼,使用RTSP流媒體服務(wù)器控制流媒體數(shù)據(jù)在IP網(wǎng)絡(luò)上的傳輸。使用過程中發(fā)現(xiàn),該直播系統(tǒng)操作簡單、畫面清晰、實時性強。
Android;RTSP/RTP協(xié)議;JNI;流媒體服務(wù)器
目前,移動端最主流的流媒體傳輸協(xié)議有RTMP和HLS兩種。RTMP協(xié)議是基于TCP傳輸?shù)?,使用非公共端口,可能會被防火墻阻攔,而且還占用帶寬;采用HLS協(xié)議直播的視頻延遲時間無法降到10秒以下,實時互動體驗差[1]。RTSP作為實時流傳輸協(xié)議,能有效地通過IP網(wǎng)絡(luò)傳送多媒體數(shù)據(jù)。RTP數(shù)據(jù)協(xié)議負責(zé)對流媒體數(shù)據(jù)進行封包并實現(xiàn)媒體流的實時傳輸,RTP數(shù)據(jù)包都由頭部和負載兩部分組成,其中頭部前12個字節(jié)的含義是固定的,負載可以是音頻或者視頻數(shù)據(jù)。RTSP/RTP協(xié)議具有較強的實時性,特別適合傳輸音視頻數(shù)據(jù),但網(wǎng)絡(luò)不穩(wěn)定時,會出現(xiàn)馬賽克或是視頻短暫卡的住不動等現(xiàn)象,直接影響了用戶體驗[2]。
為解決以上問題,本研究在文獻[2]基礎(chǔ)上,提出在系統(tǒng)算法中設(shè)置音視頻緩沖區(qū)的思路,研制了Android平臺下,基于Rtsp的移動直播系統(tǒng)。
系統(tǒng)由移動采集終端、移動播放終端、服務(wù)器端、PC端4個部分組成,如圖1所示。
系統(tǒng)采用Android手機自帶的攝像頭和麥克風(fēng)對音視頻數(shù)據(jù)進行采集[3]。Camera類采集視頻的原始數(shù)據(jù),AudioRecord類采集音頻原始數(shù)據(jù)。
采集數(shù)據(jù)基本流程為打開攝像頭、設(shè)置采集參數(shù)、數(shù)據(jù)采集、調(diào)用編碼模塊進行編碼。由于視頻原始數(shù)據(jù)中存在著時間冗余和空間冗余,需要對原始數(shù)據(jù)進行壓縮編碼。系統(tǒng)對視頻原始數(shù)據(jù)編碼采用H264編碼,對音頻原始數(shù)據(jù)編碼采用AAC編碼。最后將編碼后的數(shù)據(jù)封裝成RTP包轉(zhuǎn)發(fā)到流媒體服務(wù)器[4]。
FFmpeg作為一個跨平臺的開源視頻框架,能實現(xiàn)如視頻編碼、解碼、轉(zhuǎn)碼、串流、播放等豐富的功能。支持的播放協(xié)議和視頻格式非常豐富,幾乎包含了所有音視頻編解碼、封裝格式以及播放協(xié)議。利用NDK將FFmpeg交叉編譯成FFmpeg.so動態(tài)鏈接庫[5]。使用Java的JNI技術(shù)調(diào)用相應(yīng)的接口函數(shù)來實現(xiàn)對音視頻數(shù)據(jù)的編解碼。其中編碼的流程如圖所示:
圖2 音視頻編碼流程圖
視頻的播放就是把一幀一幀的圖像快速連續(xù)地顯示在屏幕上。為達到播放流暢的效果,使用兩個線程輪流去解析視頻流的幀圖像,當(dāng)一個線程解析完幀圖像后,把圖像渲染到界面中,同時另一線程開始解析下一幀圖像。
當(dāng)播放端向流媒體服務(wù)器提出播放請求時,Web服務(wù)器會進行認證并返回請求結(jié)果。如果請求成功,流媒體服務(wù)器會向采集端發(fā)送調(diào)取數(shù)據(jù)的指令,視頻采集端收到指令后會發(fā)送視頻流到流媒體服務(wù)器。流媒體服務(wù)器將實時視頻流傳送到Android播放端進行解碼并播放,循環(huán)反復(fù)這個過程,直到結(jié)束請求或視頻采集結(jié)束。
流媒體服務(wù)器獲取音視頻流并實時進行處理,同時監(jiān)聽和接收移動播放終端的連接請求,當(dāng)請求成功時向移動播放終端發(fā)送音視頻流。由于流媒體服務(wù)器在不同時刻響應(yīng)不同客戶端的請求,所以為了滿足實時性的要求,服務(wù)器端采用多線程的算法。一次基本的RTSP操作過程包括如下步驟。
首先采用HTTP協(xié)議從Web服務(wù)器獲得該媒體流的演示描述文件。該文件包括視頻服務(wù)器地址、端口號及視頻服務(wù)的編碼方式等信息。
然后,客戶端分析該描述文件,并為會話中的每一個流發(fā)送一個RTSP建立命令,RTSP建立命令告訴服務(wù)器客戶端用于接收媒體數(shù)據(jù)的端口。流媒體連接建立完成。
接著,客戶端發(fā)送一個播放命令(PLAY),服務(wù)器就開始在UDP上傳送媒體流(RTP包)到客戶端。在播放過程中客戶端還可以向服務(wù)器發(fā)送命令來控制快進、快退和暫停等。
最后,客戶端可發(fā)送一個終止命令(TERA- DOWN)來結(jié)束流媒體會話,釋放資源。交互過程如圖3所示。
圖3 客戶端和RTSP服務(wù)器交互過程
網(wǎng)絡(luò)管理和Web服務(wù)器通過發(fā)布Web網(wǎng)站共同提供PC客戶端訪問服務(wù)器的網(wǎng)絡(luò)接口,管理員通過網(wǎng)絡(luò)管理,可以對后臺進行維護。數(shù)據(jù)庫服務(wù)器是整個系統(tǒng)的數(shù)據(jù)存儲中心,主要用來存儲所有與系統(tǒng)有關(guān)的媒體文件信息、用戶信息以及聊天消息信息。
PC端利用本地瀏覽器,通過Web方式訪問網(wǎng)絡(luò)管理中心,實現(xiàn)對整個服務(wù)器上存儲的媒體資源、用戶信息以及服務(wù)器本身的管理和控制。
OkHttp是一個高效的HTTP客戶端,它有以下默認特性:(1)支持HTTP/2,允許所有同一個主機地址的請求共享同一個socket連接;(2)連接池減少請求延時;(3)透明的GZIP壓縮減少響應(yīng)數(shù)據(jù)的大小;(4)緩存響應(yīng)內(nèi)容,避免一些完全重復(fù)的請求[6]。
當(dāng)網(wǎng)絡(luò)出現(xiàn)問題的時候OkHttp依然堅守自己的職責(zé),它會自動恢復(fù)一般的連接問題,如果你的服務(wù)有多個IP地址,當(dāng)?shù)谝粋€IP請求失敗時,OkHttp會交替嘗試你配置的其他IP,OkHttp使用現(xiàn)代TLS技術(shù)(SNI, ALPN)初始化新的連接,當(dāng)握手失敗時會回退到TLS 1.0[7]?;谝陨蟽?yōu)點使用OkHttp作為應(yīng)用程序HTTP請求客戶端。
系統(tǒng)客戶端和服務(wù)端間采用的是JSON報文的形式作為數(shù)據(jù)傳送的格式,客戶端通過HTTP請求后獲取返回的JSON格式的信息,再通過解析JSON數(shù)據(jù)就能獲得所需要的數(shù)據(jù)。
系統(tǒng)包含啟動、導(dǎo)航、應(yīng)用三個視圖層。每個視圖層包含的功能如圖4所示。
圖4 視圖層及包含功能
在啟動視圖下,用戶填寫的賬號和密碼若與服務(wù)器上存儲的賬號與密碼一致,就彈出登錄成功的界面。如果輸入的密碼錯誤達到3次以上,用戶會被鎖定,5分鐘后自動解鎖。當(dāng)用戶忘記密碼時可以通過驗證手機號找回密碼。登錄中需要對手機號和密碼做校驗,校驗格式是否正確。用戶可以在電信、移動、聯(lián)通三種網(wǎng)絡(luò)類型間進行手動切換。點擊“新用戶注冊”后會出現(xiàn)注冊界面用來注冊新賬號。其中登錄請求代碼如下:
2.2.1 首頁
首頁界面包含搜索框和房間列表,用戶可以通過下拉進行房間列表刷新。在搜索框中輸入房間ID可以查詢房間,否則提示房間不存在。
2.2.2 個人中心
個人中心界面主要顯示用戶的一些個人信息,可以展示頭像、用戶昵稱、用戶ID,可以修改頭像、修改昵稱、修改密碼、退出程序、切換賬戶等功能。
在應(yīng)用視圖下,進入房間后可以對主播發(fā)送禮物及聊天信息,查看房間用戶,打開、關(guān)閉直播視頻和聲音。用戶使用金幣購買對應(yīng)數(shù)量的禮物。不同的禮物擁有不同的名稱和圖片。禮物信息包含贈送者頭像、昵稱、禮物圖片、禮物數(shù)量,同一時間,只展示1條贈送禮物的信息。贈送禮物花費的金幣,會按照1:1的比例轉(zhuǎn)化為該用戶對主播貢獻的金幣數(shù)量。
將應(yīng)用程序打包成apk文件后安裝到Android手機上,采用無線4G網(wǎng)絡(luò)傳輸數(shù)據(jù)。按照需求書內(nèi)容反復(fù)測試每個功能,結(jié)果發(fā)現(xiàn),音視頻同步性良好,畫面觀看流暢。測試如圖5所示,手持手機作為數(shù)據(jù)采集端,后面手機作為數(shù)據(jù)播放端。
圖5 系統(tǒng)測試
基于Android平臺設(shè)計的流媒體直播系統(tǒng)具有操作簡單、功能齊全、移動視頻直播畫面清晰、實時性強、性能良好等特點,具有很好的實用價值??梢愿鶕?jù)實際需求的變化,引入最新技術(shù)對本直播系統(tǒng)進行改進,進一步提高移動直播平臺的先進性、科學(xué)性和適用性。
[1] 潘安樂.基于Android的電梯遠程實時視頻傳輸系統(tǒng)設(shè)計[D].蘇州:蘇州大學(xué),2019:14-15.
[2] 李校林,劉海波,張杰.RTP/RTCP,RTSP在無線視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[J].電視技術(shù),2011,35(19):89 -92.
[3] 張建平.基于Android手機實時視頻采集與傳輸軟件設(shè)計[J].系統(tǒng)仿真技術(shù),2020,16(1):60-63.
[4] 于瀚博.基于Android的機載音視頻實時傳輸方案設(shè)計與實現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2014:21-22.
[5] 高攀. Android系統(tǒng)下基于FFmpeg框架的多媒體播放器研究[D].北京:中國地質(zhì)大學(xué),2016:15.
[6] 胡李鎮(zhèn).基于RTSP的嵌入式流媒體服務(wù)器設(shè)計與實現(xiàn)[D].武漢:華中科技大學(xué),2017:11-15.
[7] 李群.基于OkHttp的文件傳輸設(shè)計與實現(xiàn)[J].電子技術(shù)與軟件工程,2018,7(13):180-181.
Design of Mobile Live Broadcast System Based on RTSP under Android Platform
ZHOU Xiang, YU Xin, ZHANG Xia, BAO Yu, YANG Hai-bo, PAN Pei-sen
(Department of Research and Development, Nantong Yirong Network Technology Co., Ltd., Nantong 226000, China)
In this paper, based on the RTSP/RTP protocol and the function implementation of each module the communication process between the client and the server was studied by using OKHttp for network data transmission. Finally, the function of each component of the software is described. The system is based on the Android platform and uses FFMpeg library and JNI technology to implement audio and video encoding and decoding, and RTSP streaming media server to control the transmission of streaming media data on the IP network. The system has the advantage of complete functions, simple operation, clear pictures, and strong real-time performance.
android; RTSP/RTP protocol; JNI; streaming media server
TP311
A
1009-9115(2021)06-0046-04
10.3969/j.issn.1009-9115.2021.06.012
2021-02-25
2021-07-02
周翔(1987-),男,江蘇鹽城人,工程師,研究方向為移動app開發(fā)、人工智能。
(責(zé)任編輯、校對:田敬軍)