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