周 翔,俞 鑫,張 霞,包 瑜,楊海波,潘培森
Android平臺下基于RTSP的移動直播系統設計
周 翔,俞 鑫,張 霞,包 瑜,楊海波,潘培森
(南通億榮網絡科技有限公司 研發部,江蘇 南通 226000)
以RTSP/RTP協議為基礎,采用OKHttp進行網絡數據傳輸,研制了Android平臺下基于Rtsp的移動直播系統。該系統采用FFMpeg庫并結合JNI技術實現音視頻的編解碼,使用RTSP流媒體服務器控制流媒體數據在IP網絡上的傳輸。使用過程中發現,該直播系統操作簡單、畫面清晰、實時性強。
Android;RTSP/RTP協議;JNI;流媒體服務器
目前,移動端最主流的流媒體傳輸協議有RTMP和HLS兩種。RTMP協議是基于TCP傳輸的,使用非公共端口,可能會被防火墻阻攔,而且還占用帶寬;采用HLS協議直播的視頻延遲時間無法降到10秒以下,實時互動體驗差[1]。RTSP作為實時流傳輸協議,能有效地通過IP網絡傳送多媒體數據。RTP數據協議負責對流媒體數據進行封包并實現媒體流的實時傳輸,RTP數據包都由頭部和負載兩部分組成,其中頭部前12個字節的含義是固定的,負載可以是音頻或者視頻數據。RTSP/RTP協議具有較強的實時性,特別適合傳輸音視頻數據,但網絡不穩定時,會出現馬賽克或是視頻短暫卡的住不動等現象,直接影響了用戶體驗[2]。
為解決以上問題,本研究在文獻[2]基礎上,提出在系統算法中設置音視頻緩沖區的思路,研制了Android平臺下,基于Rtsp的移動直播系統。
系統由移動采集終端、移動播放終端、服務器端、PC端4個部分組成,如圖1所示。
系統采用Android手機自帶的攝像頭和麥克風對音視頻數據進行采集[3]。Camera類采集視頻的原始數據,AudioRecord類采集音頻原始數據。
采集數據基本流程為打開攝像頭、設置采集參數、數據采集、調用編碼模塊進行編碼。由于視頻原始數據中存在著時間冗余和空間冗余,需要對原始數據進行壓縮編碼。系統對視頻原始數據編碼采用H264編碼,對音頻原始數據編碼采用AAC編碼。最后將編碼后的數據封裝成RTP包轉發到流媒體服務器[4]。
FFmpeg作為一個跨平臺的開源視頻框架,能實現如視頻編碼、解碼、轉碼、串流、播放等豐富的功能。支持的播放協議和視頻格式非常豐富,幾乎包含了所有音視頻編解碼、封裝格式以及播放協議。利用NDK將FFmpeg交叉編譯成FFmpeg.so動態鏈接庫[5]。使用Java的JNI技術調用相應的接口函數來實現對音視頻數據的編解碼。其中編碼的流程如圖所示:

圖2 音視頻編碼流程圖
視頻的播放就是把一幀一幀的圖像快速連續地顯示在屏幕上。為達到播放流暢的效果,使用兩個線程輪流去解析視頻流的幀圖像,當一個線程解析完幀圖像后,把圖像渲染到界面中,同時另一線程開始解析下一幀圖像。
當播放端向流媒體服務器提出播放請求時,Web服務器會進行認證并返回請求結果。如果請求成功,流媒體服務器會向采集端發送調取數據的指令,視頻采集端收到指令后會發送視頻流到流媒體服務器。流媒體服務器將實時視頻流傳送到Android播放端進行解碼并播放,循環反復這個過程,直到結束請求或視頻采集結束。
流媒體服務器獲取音視頻流并實時進行處理,同時監聽和接收移動播放終端的連接請求,當請求成功時向移動播放終端發送音視頻流。由于流媒體服務器在不同時刻響應不同客戶端的請求,所以為了滿足實時性的要求,服務器端采用多線程的算法。一次基本的RTSP操作過程包括如下步驟。
首先采用HTTP協議從Web服務器獲得該媒體流的演示描述文件。該文件包括視頻服務器地址、端口號及視頻服務的編碼方式等信息。
然后,客戶端分析該描述文件,并為會話中的每一個流發送一個RTSP建立命令,RTSP建立命令告訴服務器客戶端用于接收媒體數據的端口。流媒體連接建立完成。
接著,客戶端發送一個播放命令(PLAY),服務器就開始在UDP上傳送媒體流(RTP包)到客戶端。在播放過程中客戶端還可以向服務器發送命令來控制快進、快退和暫停等。
最后,客戶端可發送一個終止命令(TERA- DOWN)來結束流媒體會話,釋放資源。交互過程如圖3所示。

圖3 客戶端和RTSP服務器交互過程
網絡管理和Web服務器通過發布Web網站共同提供PC客戶端訪問服務器的網絡接口,管理員通過網絡管理,可以對后臺進行維護。數據庫服務器是整個系統的數據存儲中心,主要用來存儲所有與系統有關的媒體文件信息、用戶信息以及聊天消息信息。
PC端利用本地瀏覽器,通過Web方式訪問網絡管理中心,實現對整個服務器上存儲的媒體資源、用戶信息以及服務器本身的管理和控制。
OkHttp是一個高效的HTTP客戶端,它有以下默認特性:(1)支持HTTP/2,允許所有同一個主機地址的請求共享同一個socket連接;(2)連接池減少請求延時;(3)透明的GZIP壓縮減少響應數據的大小;(4)緩存響應內容,避免一些完全重復的請求[6]。
當網絡出現問題的時候OkHttp依然堅守自己的職責,它會自動恢復一般的連接問題,如果你的服務有多個IP地址,當第一個IP請求失敗時,OkHttp會交替嘗試你配置的其他IP,OkHttp使用現代TLS技術(SNI, ALPN)初始化新的連接,當握手失敗時會回退到TLS 1.0[7]。基于以上優點使用OkHttp作為應用程序HTTP請求客戶端。
系統客戶端和服務端間采用的是JSON報文的形式作為數據傳送的格式,客戶端通過HTTP請求后獲取返回的JSON格式的信息,再通過解析JSON數據就能獲得所需要的數據。
系統包含啟動、導航、應用三個視圖層。每個視圖層包含的功能如圖4所示。

圖4 視圖層及包含功能
在啟動視圖下,用戶填寫的賬號和密碼若與服務器上存儲的賬號與密碼一致,就彈出登錄成功的界面。如果輸入的密碼錯誤達到3次以上,用戶會被鎖定,5分鐘后自動解鎖。當用戶忘記密碼時可以通過驗證手機號找回密碼。登錄中需要對手機號和密碼做校驗,校驗格式是否正確。用戶可以在電信、移動、聯通三種網絡類型間進行手動切換。點擊“新用戶注冊”后會出現注冊界面用來注冊新賬號。其中登錄請求代碼如下:
2.2.1 首頁
首頁界面包含搜索框和房間列表,用戶可以通過下拉進行房間列表刷新。在搜索框中輸入房間ID可以查詢房間,否則提示房間不存在。
2.2.2 個人中心
個人中心界面主要顯示用戶的一些個人信息,可以展示頭像、用戶昵稱、用戶ID,可以修改頭像、修改昵稱、修改密碼、退出程序、切換賬戶等功能。
在應用視圖下,進入房間后可以對主播發送禮物及聊天信息,查看房間用戶,打開、關閉直播視頻和聲音。用戶使用金幣購買對應數量的禮物。不同的禮物擁有不同的名稱和圖片。禮物信息包含贈送者頭像、昵稱、禮物圖片、禮物數量,同一時間,只展示1條贈送禮物的信息。贈送禮物花費的金幣,會按照1:1的比例轉化為該用戶對主播貢獻的金幣數量。
將應用程序打包成apk文件后安裝到Android手機上,采用無線4G網絡傳輸數據。按照需求書內容反復測試每個功能,結果發現,音視頻同步性良好,畫面觀看流暢。測試如圖5所示,手持手機作為數據采集端,后面手機作為數據播放端。

圖5 系統測試
基于Android平臺設計的流媒體直播系統具有操作簡單、功能齊全、移動視頻直播畫面清晰、實時性強、性能良好等特點,具有很好的實用價值。可以根據實際需求的變化,引入最新技術對本直播系統進行改進,進一步提高移動直播平臺的先進性、科學性和適用性。
[1] 潘安樂.基于Android的電梯遠程實時視頻傳輸系統設計[D].蘇州:蘇州大學,2019:14-15.
[2] 李校林,劉海波,張杰.RTP/RTCP,RTSP在無線視頻監控系統的設計與實現[J].電視技術,2011,35(19):89 -92.
[3] 張建平.基于Android手機實時視頻采集與傳輸軟件設計[J].系統仿真技術,2020,16(1):60-63.
[4] 于瀚博.基于Android的機載音視頻實時傳輸方案設計與實現[D].哈爾濱:哈爾濱工業大學,2014:21-22.
[5] 高攀. Android系統下基于FFmpeg框架的多媒體播放器研究[D].北京:中國地質大學,2016:15.
[6] 胡李鎮.基于RTSP的嵌入式流媒體服務器設計與實現[D].武漢:華中科技大學,2017:11-15.
[7] 李群.基于OkHttp的文件傳輸設計與實現[J].電子技術與軟件工程,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開發、人工智能。
(責任編輯、校對:田敬軍)