專利名稱:基于Android系統(tǒng)的通用RTSP流播放器的制作方法
技術領域:
本發(fā)明涉及智能終端播放器領域,特別是Andriod操作系統(tǒng)的智能終端。
背景技術:
目前市面上的Android智能終端,大多數不支持通過RTSP協(xié)議的連接方式播放音視頻流,即使支持,也不能修改RTSP的交互協(xié)議,不能普及到一些特殊的應用場景,比如通過智能終端播放RTSP協(xié)議的監(jiān)控視頻流。針對目前存在的問題,發(fā)明了基于Andriod系統(tǒng)的通用RTSP流播放器。發(fā)明內容
本發(fā)明的目的在于針對目前存在的問題,提供一種兼容多種版本的Andriod操作系統(tǒng),支持ARMv6架構及以上的ARM芯片平臺,能播放RTSP音視頻流的播放器。
本發(fā)明目的技術方案為基于Android系統(tǒng)的通用RTSP流播放器,包括音視頻解碼庫、基于C語g的動態(tài)庫和基于Java語g的JAR庫。
音視頻解碼庫用于數據獲取、數據解碼;基于C語言的動態(tài)庫用于連接音視頻解碼庫和基于Java語言的JAR庫,將音視頻解碼庫解碼的數據進行顯示;基于Java語言的JAR庫用于功能調用、參數傳遞和播放器控制。
上述方案中,所述的音視頻解碼庫包括工具模塊、解復用模塊、解碼模塊和畫面縮放模塊。
上述方案中,工具模塊為音視頻解碼庫的各個模塊提供通用的函數接口,達到源代碼的重用;解復用模塊對文件或網絡數據進行拆包,從中提取音頻和視頻數據;解碼模塊對音頻和視頻數據進行解碼,輸出Android系統(tǒng)支持的音視頻原始數據。
上述方案中,所述基于C語言的動態(tài)庫由三部分組成jni模塊、音頻輸出模塊和視頻輸出模塊。
上述方案中,所述JAR庫由二部分組成java api模塊和jni api模塊。
上述方案中,所述的基于Android系統(tǒng)的通用RTSP流播放器的播放方法步驟一初始化各功能模塊;步驟二 工具模塊獲取音視頻數據;步驟三解復用模塊對獲取的數據拆包,分離出音頻和視頻數據;步驟四解碼模塊對分離出來的數據進行解碼,傳到動態(tài)庫;步驟五動態(tài)庫對解碼后的 音視頻數據進行播放和顯示。
上述方案中,播放器的播放方法,在所述步驟一初始化各功能模塊時首先調用JAR 庫中的java api模塊,然后所述java api模塊調用jni api模塊中的函數,然后通過jni 方法調用所述動態(tài)庫中各個模塊。
上述方案中,播放器的播放方法,在所述步驟一結束之后,RTSP地址通過jni方法傳遞給音視頻解碼模塊中的工具模塊,工具模塊得到該地址后,通過socket與RTSP服務器進行交互認證和數據獲取。
上述方案中,播放器的播放方法,在所述步驟四中,解碼模塊是從流媒體服務器返回的SDP域信息中提取數據格式,并設置所述解碼庫的參數。
上述方案中,播放器的播放方法,所述音視頻解碼庫能夠對ARM架構中的浮點和多媒體指令進行處理。
與現有技術相比,上述技術方案的有益效果由于音視頻解碼庫和基于C語言的動態(tài)庫在C空間運行,提聞了首視頻的解碼效率;支持RTSP協(xié)議的首視頻流的播放;支持 Android 2.0及以上版本的操作系統(tǒng);支持ARMv6架構及以上的ARM芯片平臺,因此具有通用性。
圖1是本發(fā)明的框架示意圖;圖2是本發(fā)明的工作流程圖。
具體實施方式
如圖1所示,基于Android系統(tǒng)的通用RTSP流播放器,包括音視頻解碼庫、基于C 語目的動態(tài)庫和基于Java語目的JAR庫。
音視頻解碼庫由四部分組成工具模塊、解復用模塊、解碼模塊和畫面縮放模塊組成。
基于C語言的動態(tài)庫由三部分組成jni模塊、音頻輸出模塊和視頻輸出模塊。
JAR庫由二部分組成java api模塊和jni api模塊。
音視頻解碼庫的工具模塊為音視頻解碼庫的各個模塊提供通用的函數接口,達到源代碼的重用;解復用模塊對文件或網絡數據進行拆包,從中提取音頻和視頻數據;解碼模塊對音頻和視頻數據進行解碼,從而輸出Android系統(tǒng)支持的音視頻原始數據。
基于C語言的動態(tài)庫的jni模塊為JAR庫與音視頻解碼庫提供溝通的橋梁,保證 Java和C語言之間能夠相互調用;音頻輸出模塊將音視頻解碼庫中輸出的音頻數據送入系統(tǒng)底層進行播放;視頻輸出模塊將音視頻解碼庫中輸出的視頻數據送入系統(tǒng)底層進行顯/Jn ο
JAR庫的java api模塊為開發(fā)者提供可以調用的api函數;jni api模塊提供JAR 庫內部使用的api函數,并不對外開放,通過jni api可以調用動態(tài)庫中的功能函數。
圖2顯示的是基于Android系統(tǒng)的通用RTSP流播放器的工作流程,其工作流程包括初始化流程和播放流程。
初始化流程調用JAR庫中的java api模塊,然后該模塊調用jni api模塊中的函數,然后通過jni 方法調用動態(tài)庫中各個模塊的初始化方法,其中在初始化jni模塊時,會調用音視頻解碼庫中各個模塊的初始化方法,至此完成所有模塊的初始化工作。
播放流程`在java層,RTSP地址通過jni方法傳遞給音視頻解碼庫,工具模塊得到該地址后,通過socket與RTSP服務器進行交互認證和數據獲?。唤鈴陀媚K將工具模塊獲取的數據進行拆包,分離出其中的音頻和視頻數據;解碼模塊分別針對音頻和視頻數據進行解碼,然后將解碼后的數據回傳給動態(tài)庫中的音頻輸出模塊和視頻輸出模塊進行播放和顯示。
為了讓播放器達到預想的效果,技術方案克服了以下困難1.為了讓音視頻解碼庫正確編譯并且在Android系統(tǒng)和ARM芯片平臺上正確運行,做了如下修改a)設置音視頻解碼庫的處理器參數,指定為ARM架構;b)設置音視頻解碼庫的跨平臺編譯選項;c)增加對ARM架構中浮點、多媒體等指令的支持。
2.為了讓工具模塊正確編譯,做了如下修改由于Android的編譯工具不支持restrict關鍵字,修改音視頻解碼庫源碼下的 config. h 文件,將 #define restrict restrict 修改為 #define restrict ;修改 libavutil/libm. h文件,把其中的static方法都刪除;3.為了讓解復用模塊正確編譯,并且支持大于4GB的文件,做了如下修改修改libavformat/file. c文件中的file_seek()函數,將IseekO函數修改為 lseek64()函數,使解復用模塊支持大于4GB的文件;4.為了解析流媒體服務器的數據格式,修改libavformat/rtsp.c文件。修改后,將解析發(fā)送Describe命令后流媒體服務器返回的SDP域信息,從中提取數據格式, 從而設置解碼庫的參數,使音視頻解碼更具擴展性。
權利要求
1.基于Android系統(tǒng)的通用RTSP流播放器,包括音視頻解碼庫、基于C語言的動態(tài)庫和基于Java語言的JAR庫;所述音視頻解碼庫用于音視頻數據獲取、數據解碼;所述基于C語言的動態(tài)庫連接音視頻解碼庫和基于Java語言的JAR庫,將音視頻解碼庫解碼的數據進行播放和顯示;所述基于Java語言的JAR庫用于功能調用、參數傳遞和播放器控制。
2.如權利要求1所述的播放器,其特征在于所述音視頻解碼庫包括工具模塊、解復用模塊、解碼模塊和畫面縮放模塊。
3.如權利要求2所述的播放器,其特征在于上述工具模塊為音視頻解碼庫提供通用的函數接口,達到源代碼的重用;解復用模塊對文件或網絡數據進行拆包,從中提取音頻和視頻數據;解碼模塊對音頻和視頻數據進行解碼,輸出Android系統(tǒng) 支持的音視頻原始數據。
4.如權利要求1所述的播放器,其特征在于所述基于C語言的動態(tài)庫由三部分組成 Jni模塊、音頻輸出模塊和視頻輸 出模 塊。
5.如權利要求1所述的播放器,其特征在于所述JAR庫由二部分組成javaapi模塊和jni api模塊。
6.如權利要求1所述的基于Android系統(tǒng)的通用RTSP流播放器的播放方法包括如下步驟步驟一初始化各功能模塊;步驟二 工具模塊獲取音視頻數據;步驟三解復用模塊對獲取的數據拆包,分離出音頻和視頻數據;步驟四解碼模塊對分離出來的數據進行解碼,傳到動態(tài)庫;步驟五動態(tài)庫對解碼后的數據進行播放和顯示。
7.如權利要求6所述的基于Android系統(tǒng)的通用RTSP流播放器的播放方法,進一步包括在上述步驟一初始化各功能模塊時首先調用JAR庫中的java api模塊,然后所述java api模塊調用jni api模塊中的函數,然后通過jni方法調用上述動態(tài)庫中各個模塊。
8.如權利要求7所述的基于Android系統(tǒng)的通用RTSP流播放器的播放方法,進一步包括在上述步驟一結束之后,RTSP地址通過jni方法傳遞給音視頻解碼模塊中的工具模塊, 工具模塊得到該地址后,通過socket與RTSP服務器進行交互認證和數據獲取。
9.如權利要求8所述的基于Android系統(tǒng)的通用RTSP流播放器的播放方法,進一步包括在上述步驟四中,解碼模塊是從流媒體服務器返回的SDP域信息中提取數據格式,并設置上述解碼庫的參數。
10.如權利要求6-9之一所述的基于Android系統(tǒng)的通用RTSP流播放器的播放方法, 進一步包括上述音視頻解碼庫能夠對ARM架構中的浮點和多媒體指令進行處理。
全文摘要
本發(fā)明公開了一種基于Android系統(tǒng)的通用RTSP流播放器,其特征是包括音視頻解碼庫、基于C語言的動態(tài)庫和基于Java語言的JAR庫。本發(fā)明的有益效果在于具備播放RTSP協(xié)議的音視頻流的功能;支持Android2.0及以上版本的操作系統(tǒng);支持ARMv6架構及以上的ARM芯片平臺。
文檔編號H04N21/438GK103051946SQ201210573010
公開日2013年4月17日 申請日期2012年12月26日 優(yōu)先權日2012年12月26日
發(fā)明者熊飛 申請人:四川九洲電器集團有限責任公司