亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

網(wǎng)絡(luò)音頻mp3流亂序分段解碼方法

文檔序號:7814434閱讀:340來源:國知局
網(wǎng)絡(luò)音頻mp3流亂序分段解碼方法
【專利摘要】本發(fā)明提供了一種網(wǎng)絡(luò)音頻MP3流亂序分段解碼方法,涉及音頻流處理【技術(shù)領(lǐng)域】。本方法從網(wǎng)絡(luò)中捕獲音頻MP3數(shù)據(jù)包,獲取MP3數(shù)據(jù)幀并根據(jù)位置信息存儲在緩存中,一個session建立一個緩存,當(dāng)有連續(xù)MP3數(shù)據(jù)幀達(dá)到指定大小時,進(jìn)行音頻解碼。采用FFmpeg技術(shù)進(jìn)行數(shù)據(jù)塊解碼,解碼時修改相應(yīng)的上下文,通過偽裝的方式讓FFmpeg進(jìn)行解碼。采用具有多個加速單元的獨(dú)立板卡進(jìn)行解碼,加速單元采用FFmpeg技術(shù)實現(xiàn),從而可實現(xiàn)并行解碼。無論網(wǎng)絡(luò)音頻MP3以何種順序接收,本發(fā)明方法均能以固定數(shù)量的音頻幀為單位拼接并進(jìn)行最大程度解碼,并可支持多數(shù)據(jù)流并發(fā)解碼,提高了音頻流有效幀數(shù)的接收率和解碼率。
【專利說明】網(wǎng)絡(luò)音頻MP3流亂序分段解碼方法

【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及音頻流處理【技術(shù)領(lǐng)域】,具體是一種網(wǎng)絡(luò)音頻MP3流亂序分段解碼方法。

【背景技術(shù)】
[0002]在網(wǎng)絡(luò)音頻MP3流處理領(lǐng)域,傳統(tǒng)的處理方案一般為根據(jù)音頻流按序處理。實際運(yùn)用中,由于P2P、分段下載以及UDP協(xié)議的特性,使得亂序的音頻流存在。目前已有的處理方法只能跳過亂序的數(shù)據(jù)流,導(dǎo)致解碼不完整,不能還原整個數(shù)據(jù)流。


【發(fā)明內(nèi)容】

[0003]本發(fā)明的目的是為了最大程度的正確處理亂序的音頻MP3流,提出了一種網(wǎng)絡(luò)音頻MP3流亂序分段解碼方法,通過本地緩存、分段處理以進(jìn)行最大程度解碼。
[0004]本發(fā)明提供的網(wǎng)絡(luò)音頻MP3流亂序分段解碼方法,包括兩大步驟:
[0005]第一步,從網(wǎng)絡(luò)中捕獲音頻MP3數(shù)據(jù)包并保存;包括如下步驟1.1?步驟1.3 ;
[0006]步驟1.1、捕獲網(wǎng)絡(luò)傳輸來的數(shù)據(jù)包,當(dāng)數(shù)據(jù)包為MP3數(shù)據(jù)包時,執(zhí)行步驟1.2,否則繼續(xù)捕獲數(shù)據(jù)包;
[0007]步驟1.2、判斷所捕獲的MP3數(shù)據(jù)包是否屬于一個新sess1n (會話)的音頻流數(shù)據(jù),若是,為該新sess1n建立緩存,并進(jìn)入步驟1.3執(zhí)行;否則,繼續(xù)執(zhí)行步驟1.3 ;
[0008]步驟1.3、使用FFmpeg剝離MP3數(shù)據(jù)包獲取其中未解碼的MP3數(shù)據(jù)幀,根據(jù)MP3數(shù)據(jù)幀中包含的位置信息,將MP3數(shù)據(jù)幀保存至緩存中對應(yīng)的位置。
[0009]第二步,遍歷緩存中已保存的所有MP3數(shù)據(jù)幀,當(dāng)存在包含達(dá)到指定大小的連續(xù)MP3數(shù)據(jù)幀的數(shù)據(jù)塊時,采用FFmpeg技術(shù)對該數(shù)據(jù)塊進(jìn)行解碼;采用FFmpeg技術(shù)對數(shù)據(jù)塊進(jìn)行解碼時,根據(jù)數(shù)據(jù)塊在音頻流中所處的位置,找到相應(yīng)的上下文并更新后,繼續(xù)解碼。
[0010]本發(fā)明第二步采用FFmpeg技術(shù)對數(shù)據(jù)塊進(jìn)行解碼,可通過設(shè)置在獨(dú)立板卡上加速單元實現(xiàn)。所述的板卡上設(shè)置有兩個以上的加速單元,每個加速單元采用FFmpeg技術(shù)實現(xiàn),用于音視頻處理;板卡的外部接口為PC1-E,插在支持PC1-E插槽的計算機(jī)上;計算機(jī)與板卡之間實現(xiàn)DMA方式的數(shù)據(jù)傳輸,從計算機(jī)的緩存中讀取待解碼的數(shù)據(jù)塊通過DMA方式傳輸給板卡上的加速單元,加速單元將解碼后的結(jié)果數(shù)據(jù)通過DMA方式傳回計算機(jī)。
[0011]所述的板卡,其實現(xiàn)數(shù)據(jù)解碼的方法是:
[0012](I)在主機(jī)操作系統(tǒng)的用戶態(tài)下設(shè)置有API庫和管理工具,在主機(jī)操作系統(tǒng)的核心態(tài)下設(shè)置主機(jī)側(cè)硬件驅(qū)動;在板卡系統(tǒng)的核心態(tài)下設(shè)置板卡側(cè)硬件驅(qū)動,在板卡系統(tǒng)的用戶態(tài)下設(shè)置板卡控制單元和加速單元;API庫提供API函數(shù),以控制板卡啟停音視頻加速處理;主機(jī)側(cè)硬件驅(qū)動與板卡側(cè)硬件驅(qū)動用于實現(xiàn)DMA數(shù)據(jù)傳輸方式;
[0013](2)上層應(yīng)用程序調(diào)用API庫提供的API函數(shù),管理工具根據(jù)所調(diào)用的API函數(shù)向板卡控制單元發(fā)送音視頻處理的命令,板卡控制單元接收到音視頻處理的命令后,控制加速單元對音視頻數(shù)據(jù)進(jìn)行解碼處理;要處理的音視頻數(shù)據(jù)通過主機(jī)側(cè)硬件驅(qū)動從主機(jī)緩存中讀取,然后傳送給板卡側(cè)硬件驅(qū)動,板卡側(cè)硬件驅(qū)動將要處理的音視頻數(shù)據(jù)傳送給加速單元,加速單元在將解碼后的結(jié)果數(shù)據(jù)傳送給板卡側(cè)硬件驅(qū)動,板卡側(cè)硬件驅(qū)動再傳送給主機(jī)側(cè)硬件驅(qū)動,最后由主機(jī)側(cè)硬件驅(qū)動將處理后的結(jié)果數(shù)據(jù)寫回內(nèi)存。
[0014]本發(fā)明的優(yōu)點與積極效果在于:無論網(wǎng)絡(luò)音頻MP3以何種順序接收,均能以固定數(shù)量的音頻幀為單位拼接并進(jìn)行最大程度解碼;連續(xù)MP3數(shù)據(jù)幀形成的數(shù)據(jù)塊大小可根據(jù)實際應(yīng)用調(diào)整,并可支持多數(shù)據(jù)流并發(fā)解碼,提高了音頻流有效幀數(shù)的接收率和解碼率。

【專利附圖】

【附圖說明】
[0015]圖1是本發(fā)明的網(wǎng)絡(luò)音頻MP3流亂序分段解碼方法的步驟流程圖;
[0016]圖2是本發(fā)明通過FFmpeg技術(shù)實現(xiàn)并發(fā)解碼的結(jié)構(gòu)示意圖。

【具體實施方式】
[0017]下面將結(jié)合附圖和實施例對本發(fā)明作進(jìn)一步的詳細(xì)說明。
[0018]本發(fā)明提出一種基于網(wǎng)絡(luò)音頻MP3流的無序分段解碼方法,目的是最大程度的正確處理亂序的音頻MP3流。
[0019]如圖1所示,本發(fā)明的無序分段解碼方法具體包括以下步驟:
[0020]第一步,從網(wǎng)絡(luò)中捕獲音頻MP3數(shù)據(jù)包并保存;包括如下步驟1.1?步驟1.3。
[0021]步驟1.1、捕獲網(wǎng)絡(luò)傳輸來的數(shù)據(jù)包,當(dāng)數(shù)據(jù)包為音頻MP3數(shù)據(jù)包時,執(zhí)行步驟
1.2,否則繼續(xù)捕獲數(shù)據(jù)包。
[0022]步驟1.2、分析所捕獲的MP3數(shù)據(jù)包是否屬于一個新sess1n (會話)的音頻流數(shù)據(jù),若是,為該新sess1n建立緩存,并進(jìn)入步驟1.3執(zhí)行;否則,取得該sess1n的上下文數(shù)據(jù),繼續(xù)執(zhí)行步驟1.3。
[0023]步驟1.3、使用FFmpeg剝離該音頻MP3數(shù)據(jù)包,獲取該數(shù)據(jù)包中所包含的未解碼的MP3數(shù)據(jù)幀并保存。根據(jù)MP3數(shù)據(jù)幀中包含的位置信息,將MP3數(shù)據(jù)幀保存至緩存中對應(yīng)的位置。
[0024]第二步,遍歷緩存中已保存的所有MP3數(shù)據(jù)幀,對達(dá)到指定大小的數(shù)據(jù)塊采用FFmpeg技術(shù)進(jìn)行解碼。數(shù)據(jù)塊為連續(xù)的MP3數(shù)據(jù)幀,例如,當(dāng)發(fā)現(xiàn)大于3秒的連續(xù)的MP3數(shù)據(jù)幀的數(shù)據(jù)塊時,對該數(shù)據(jù)塊進(jìn)行解碼處理。數(shù)據(jù)塊的大小可以根據(jù)實際應(yīng)用調(diào)整。
[0025]解碼采用FFmpeg技術(shù)實現(xiàn)。所述的FFmpeg是一個開源免費(fèi)跨平臺的視頻和音頻流方案,它包含了非常先進(jìn)的音頻/視頻編解碼庫libavcodec, FFmpeg是一個集錄制、轉(zhuǎn)換、音/視頻編碼解碼功能為一體的完整的開源解決方案,支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多種編碼格式,AV1、MPEG、OGG, Matroska、ASF等90多種解碼格式。具體可參見http://www.ffmpeg.0rg。本發(fā)明的解碼處理由開源的FFmpeg移植而成,可實現(xiàn)目前所有FFmpeg所自帶的音視頻處理,并可隨時升級。
[0026]FFmpeg中解碼支持流方式,數(shù)據(jù)是以塊(大小不定)為單位依次送入解碼引擎解碼。解碼引擎記錄當(dāng)前流的信息,包括碼流的當(dāng)前位置等等上下文環(huán)境。有數(shù)據(jù)塊送入時,解碼引擎根據(jù)上下文計算出數(shù)據(jù)塊在碼流中所處的位置,更新上下文后再進(jìn)行解碼。因此FFmpeg中必須按照順序送入數(shù)據(jù)才能進(jìn)行正確的解碼,否則系統(tǒng)將引起異常。
[0027]本發(fā)明實現(xiàn)了對緩沖的亂序音頻數(shù)據(jù)進(jìn)行解碼,并最大可能的還原該音頻流。對于每一塊數(shù)據(jù)塊,都需要修改FFmpeg中相應(yīng)的上下文內(nèi)容,通過偽裝的方式上ffmpeg繼續(xù)解碼工作。在原有FFmpeg基礎(chǔ)上,在投入數(shù)據(jù)塊至解碼引擎前,根據(jù)該數(shù)據(jù)塊在音頻流中所處的位置,找到相應(yīng)的上下文并更新,之后解碼引擎再繼續(xù)解碼。對于每一塊數(shù)據(jù)塊,都需要修改FFmpeg中相應(yīng)的上下文內(nèi)容,通過偽裝的方式讓FFmpeg繼續(xù)解碼工作。讓解碼引擎認(rèn)為該碼流已經(jīng)到了該位置,從而能順利進(jìn)行解碼。對于一些特定的封裝,例如fIv還需要通過特殊處理flv頭尾數(shù)據(jù)來解封裝真正的數(shù)據(jù)內(nèi)容。由于數(shù)據(jù)的不完整性,F(xiàn)Fmpeg非常容易崩潰,本發(fā)明中針對常見格的流數(shù)據(jù)經(jīng)過大量測試,最大程度上了保持了系統(tǒng)的魯棒性。
[0028]本發(fā)明采用加速單元對數(shù)據(jù)塊進(jìn)行解碼。每個加速單元采用FFmpeg技術(shù)實現(xiàn),用于音視頻處理。因此,利用本發(fā)明方法可同時對多個數(shù)據(jù)塊進(jìn)行解碼處理。
[0029]所述的加速單元設(shè)置在獨(dú)立的板卡上,加速單元有多個,以實現(xiàn)并行音頻解碼處理。板卡的外部接口為PC1-E,可插在支持PC1-E插槽的計算機(jī)上,板卡通過PC1-E總線與計算機(jī)通訊。
[0030]如圖2所示,在計算機(jī)主機(jī)操作系統(tǒng)的用戶態(tài)下設(shè)置有API (Applicat1nProgramming Interface,應(yīng)用程序編程接口)庫I和管理工具2 ;在主機(jī)操作系統(tǒng)的核心態(tài)下設(shè)置DMA (Direct Memory Access,直接內(nèi)存訪問)方式的主機(jī)側(cè)硬件驅(qū)動3。在板卡系統(tǒng)的核心態(tài)下設(shè)置DMA方式的板卡側(cè)硬件驅(qū)動4 ;在板卡系統(tǒng)的用戶態(tài)下設(shè)置板卡控制單元5和加速單元6。加速單元6可以有多個,如圖2所示的實施例中為3個。
[0031]API庫I用于提供API函數(shù),實現(xiàn)板卡控制功能、狀態(tài)檢測功能、數(shù)據(jù)統(tǒng)計以及日志功能。板卡控制是指控制板卡進(jìn)行音視頻加速處理的啟動或暫?;蜿P(guān)閉。狀態(tài)檢測功能是指板卡的工作狀態(tài)查詢。數(shù)據(jù)統(tǒng)計是指通過板卡所完成的音視頻處理的數(shù)據(jù)量,數(shù)據(jù)量是指音視頻編解碼流數(shù)及字節(jié)數(shù)。
[0032]管理工具2根據(jù)所調(diào)用的API函數(shù)控制板卡完成音視頻數(shù)據(jù)的處理。管理工具2向板卡控制單元5發(fā)送音視頻處理的命令以及待處理音視頻數(shù)據(jù)的地址信息,并從板卡控制單元5接受數(shù)據(jù)處理狀態(tài)以及數(shù)據(jù)統(tǒng)計的信息。管理工具2與板卡控制單元5之間通過PC1-E總線進(jìn)行通訊。
[0033]主機(jī)側(cè)硬件驅(qū)動3與板卡側(cè)硬件驅(qū)動4用于實現(xiàn)DMA數(shù)據(jù)傳輸方式。
[0034]板卡控制單元5用于實現(xiàn)如下功能:控制板卡、數(shù)據(jù)傳輸、加速單元控制以及數(shù)據(jù)統(tǒng)計等??刂瓢蹇ㄓ糜陧憫?yīng)主機(jī)操作系統(tǒng)中管理工具2對板卡的控制,如啟動板卡進(jìn)行音視頻加速處理或暫停板塊音視頻加速處理或關(guān)閉板塊對音視頻的加速處理。加速單元控制是指加載用于音視頻編解碼處理的加速單元6。數(shù)據(jù)統(tǒng)計是指各加速單元在進(jìn)行音視頻處理后統(tǒng)計自身處理的數(shù)據(jù)量(音視頻編解碼流數(shù)及字節(jié)數(shù)),然后合并統(tǒng)計后返回給主機(jī)操作系統(tǒng)。
[0035]主機(jī)的上層應(yīng)用程序7調(diào)用API庫I提供的API函數(shù),管理工具2根據(jù)所調(diào)用的API函數(shù)控制板卡完成音視頻數(shù)據(jù)的處理。管理工具2向板卡控制單元5發(fā)送音視頻處理的命令,板卡控制單元5接收到該命令后,控制加速單元6對所要處理的音視頻數(shù)據(jù)進(jìn)行音視頻解碼處理。要處理的音視頻數(shù)據(jù)是通過主機(jī)側(cè)硬件驅(qū)動3從主機(jī)緩存中讀取,然后通過DMA方式傳送給板卡側(cè)硬件驅(qū)動4,板卡側(cè)硬件驅(qū)動4將要處理的音視頻數(shù)據(jù)傳送給加速單元6,加速單元6在將要處理的數(shù)據(jù)處理完畢后將處理后的結(jié)果數(shù)據(jù)傳送給板卡側(cè)硬件驅(qū)動4,板卡側(cè)硬件驅(qū)動4再傳送給主機(jī)側(cè)硬件驅(qū)動3,最后由主機(jī)側(cè)硬件驅(qū)動3將處理后的結(jié)果數(shù)據(jù)寫回內(nèi)存。
[0036]本發(fā)明方法中由計算機(jī)主機(jī)負(fù)責(zé)數(shù)據(jù)采集及傳輸,板卡負(fù)責(zé)音頻解碼處理,從而大大提高了普通計算機(jī)的音頻解碼能力。并且板卡和主機(jī)之間采用DMA方式傳輸數(shù)據(jù),整個音頻處理過程不占用CPU資源。板卡可采用多核處理器,例如64核的多核處理器,以提高多數(shù)據(jù)流并發(fā)解碼的效率。
[0037]采用本發(fā)明方法進(jìn)行網(wǎng)絡(luò)音頻MP3數(shù)據(jù)亂序分段解碼,與【背景技術(shù)】中的現(xiàn)有的傳統(tǒng)處理方案的對比效果如表I所示。對比采用了 INTEL XEON 2.7G+千兆網(wǎng)卡,在局域網(wǎng)內(nèi)使用快車從同一個流媒體服務(wù)器中,分5段下載6個相同的音頻流,每個音頻流下載5次,解碼后的幀數(shù)取平均值表示。
[0038]表I本發(fā)明的網(wǎng)絡(luò)音頻數(shù)據(jù)亂序分段解碼與傳統(tǒng)處理方案的對比表
[0039]
I音頻I I音頻2 I音頻3 I音頻4 I音頻5 I音頻6實際幀數(shù)183076433432140612388473
傳統(tǒng)方案3671405546Ηδ2161498
傳統(tǒng)方案解碼率 20%18%16%22%17%18%
本發(fā)明方案182976413431140512378472
本發(fā)明方案解碼率~99%99%99%99%99%99%
[0040]從表I中可以看出,利用本發(fā)明方法,相比傳統(tǒng)方案,對同一個音頻,所采集的幀數(shù)遠(yuǎn)遠(yuǎn)大于傳統(tǒng)方法,解碼率也大大提高。
【權(quán)利要求】
1.一種網(wǎng)絡(luò)音頻MP3流亂序分段解碼方法,其特征在于,包括兩大步驟: 第一步,從網(wǎng)絡(luò)中捕獲音頻MP3數(shù)據(jù)包并保存,包括如下過程: 步驟1.1、捕獲網(wǎng)絡(luò)傳輸來的數(shù)據(jù)包,當(dāng)數(shù)據(jù)包為MP3數(shù)據(jù)包時,執(zhí)行步驟1.2,否則繼續(xù)捕獲數(shù)據(jù)包; 步驟1.2、判斷所捕獲的MP3數(shù)據(jù)包是否屬于一個新sess1n的音頻流數(shù)據(jù),若是,為該新sess1n建立緩存,并進(jìn)入步驟1.3執(zhí)行;否則,繼續(xù)執(zhí)行步驟1.3 !sess1n指會話; 步驟1.3、使用FFmpeg剝離MP3數(shù)據(jù)包獲取其中未解碼的MP3數(shù)據(jù)幀,根據(jù)MP3數(shù)據(jù)幀中包含的位置信息,將MP3數(shù)據(jù)幀保存至緩存中對應(yīng)的位置; 第二步,遍歷緩存中已保存的所有MP3數(shù)據(jù)幀,當(dāng)存在包含達(dá)到指定大小的連續(xù)MP3數(shù)據(jù)幀的數(shù)據(jù)塊時,采用FFmpeg技術(shù)對該數(shù)據(jù)塊進(jìn)行解碼;采用FFmpeg技術(shù)對數(shù)據(jù)塊進(jìn)行解碼時,根據(jù)數(shù)據(jù)塊在音頻流中所處的位置,找到相應(yīng)的上下文并更新后,繼續(xù)解碼。
2.根據(jù)權(quán)利要求1所述的網(wǎng)絡(luò)音頻MP3流亂序分段解碼方法,其特征在于,第二步中所述的采用FFmpeg技術(shù)對數(shù)據(jù)塊進(jìn)行解碼,通過設(shè)置在獨(dú)立板卡上加速單元實現(xiàn);所述的板卡上設(shè)置有兩個以上的加速單元,每個加速單元采用FFmpeg技術(shù)實現(xiàn),用于音視頻處理;板卡的外部接口為PC1-E,插在支持PC1-E插槽的計算機(jī)上;計算機(jī)與板卡之間實現(xiàn)DMA方式的數(shù)據(jù)傳輸,從計算機(jī)的緩存中讀取待解碼的數(shù)據(jù)塊通過DMA方式傳輸給板卡上的加速單元,加速單元將解碼后的結(jié)果數(shù)據(jù)通過DMA方式傳回計算機(jī)。
3.根據(jù)權(quán)利要求2所述的網(wǎng)絡(luò)音頻MP3流亂序分段解碼方法,其特征在于,第二步中所述的板卡,其實現(xiàn)數(shù)據(jù)解碼的方法是: (1)在主機(jī)操作系統(tǒng)的用戶態(tài)下設(shè)置有API庫和管理工具,在主機(jī)操作系統(tǒng)的核心態(tài)下設(shè)置主機(jī)側(cè)硬件驅(qū)動;在板卡系統(tǒng)的核心態(tài)下設(shè)置板卡側(cè)硬件驅(qū)動,在板卡系統(tǒng)的用戶態(tài)下設(shè)置板卡控制單元和加速單元;API庫提供API函數(shù),以控制板卡啟停音視頻加速處理;主機(jī)側(cè)硬件驅(qū)動與板卡側(cè)硬件驅(qū)動用于實現(xiàn)DMA數(shù)據(jù)傳輸方式; (2)上層應(yīng)用程序調(diào)用API庫提供的API函數(shù),管理工具根據(jù)所調(diào)用的API函數(shù)向板卡控制單元發(fā)送音視頻處理的命令,板卡控制單元接收到音視頻處理的命令后,控制加速單元對音視頻數(shù)據(jù)進(jìn)行解碼處理;要處理的音視頻數(shù)據(jù)通過主機(jī)側(cè)硬件驅(qū)動從主機(jī)緩存中讀取,然后傳送給板卡側(cè)硬件驅(qū)動,板卡側(cè)硬件驅(qū)動將要處理的音視頻數(shù)據(jù)傳送給加速單元,加速單元在將解碼后的結(jié)果數(shù)據(jù)傳送給板卡側(cè)硬件驅(qū)動,板卡側(cè)硬件驅(qū)動再傳送給主機(jī)側(cè)硬件驅(qū)動,最后由主機(jī)側(cè)硬件驅(qū)動將處理后的結(jié)果數(shù)據(jù)寫回內(nèi)存。
【文檔編號】H04N21/443GK104202656SQ201410472027
【公開日】2014年12月10日 申請日期:2014年9月16日 優(yōu)先權(quán)日:2014年9月16日
【發(fā)明者】云曉春, 周游, 袁慶升, 謝銘, 包秀國, 周康成, 薛晨, 鄒學(xué)強(qiáng) 申請人:國家計算機(jī)網(wǎng)絡(luò)與信息安全管理中心, 北京賽思信安技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1