專利名稱:一種借助輔助文件實(shí)現(xiàn)多媒體文件網(wǎng)絡(luò)播放的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種視頻播放器實(shí)現(xiàn)網(wǎng)絡(luò)播放的方法,具體的說是終端通過網(wǎng)絡(luò)獲取數(shù)據(jù)源服務(wù)器上的節(jié)目的輔助文件和主文件,邊下載,邊緩存、邊解析并將解析出的數(shù)據(jù)投送給底層解碼播放的方法。
背景技術(shù):
多媒體文件網(wǎng)絡(luò)播放系統(tǒng),是一種在網(wǎng)絡(luò)上提供視音頻數(shù)據(jù)源的服務(wù)器按照一定的流媒體交互協(xié)議,獲取流媒體數(shù)據(jù),進(jìn)行播放的系統(tǒng)。用戶可進(jìn)行播放、暫停、快進(jìn)、快退、選時(shí)(從任意時(shí)間點(diǎn)開始播放)等特技播放操作。為完成上述功能,一般地,服務(wù)器軟件都做了專門的開發(fā),如對(duì)超文本傳輸協(xié)議(Hypertext Transfer Protocol)協(xié)議進(jìn)行擴(kuò)展,使用實(shí)時(shí)流媒體協(xié)議(Real Time Streaming Protocol)等。為方便閱讀,本發(fā)明中用到的名詞縮寫列舉如下
HTTP Hypertext Transfer Protocol,超文本傳輸協(xié)議;
RTSP Real Time Streaming Protocol,實(shí)時(shí)流媒體協(xié)議;
TCP !Transmission Control Protocol,傳輸控制協(xié)議;
Demux :解析、解復(fù)用;
FTP File Transfer Protocol,文件傳輸協(xié)議;
Samba Server Messages Block協(xié)議,進(jìn)行文件共享和打印共享服務(wù)的協(xié)議;
URL !Universal Resource Locator,統(tǒng)一資源定位符。
發(fā)明內(nèi)容
本發(fā)明的目的就在于實(shí)現(xiàn)一個(gè)多媒體文件網(wǎng)絡(luò)播放的方法,其支持多種文件格式的網(wǎng)絡(luò)播放,并且不需對(duì)數(shù)據(jù)源服務(wù)器做專門開發(fā),只要服務(wù)器支持?jǐn)帱c(diǎn)續(xù)傳,就能支持視頻播放、快進(jìn)、快退、暫停、恢復(fù)播放、選時(shí)播放。本發(fā)明的目的可通過以下措施來實(shí)現(xiàn)
本發(fā)明中,數(shù)據(jù)源服務(wù)器對(duì)多媒體主文件進(jìn)行解析,得到多媒體的標(biāo)示信息,并將標(biāo)示信息寫入關(guān)鍵索引文件、快進(jìn)輔助文件和快退輔助文件三個(gè)輔助文件中,然后將三個(gè)輔助文件和多媒體主文件放置在數(shù)據(jù)源服務(wù)器上同級(jí)目錄下;所述的播放器終端包括網(wǎng)絡(luò)接口模塊、數(shù)據(jù)讀取模塊、解復(fù)用模塊、解碼調(diào)用模塊和硬解碼接口模塊;當(dāng)點(diǎn)播節(jié)目時(shí),數(shù)據(jù)讀取模塊通過網(wǎng)絡(luò)接口模塊讀取關(guān)鍵索引文件,從而獲取播放所需的信息,之后解復(fù)用模塊對(duì)多媒體主文件和輔助文件進(jìn)行解析,獲得視音頻幀;解碼調(diào)用模塊將視音頻幀通過硬解碼接口模塊投遞給硬件進(jìn)行解碼播放。所述的播放器終端與數(shù)據(jù)源服務(wù)器之間采用斷點(diǎn)續(xù)傳的網(wǎng)絡(luò)協(xié)議獲取多媒體主文件和三個(gè)輔助文件的數(shù)據(jù)流。在解復(fù)用模塊進(jìn)行解析時(shí),通過對(duì)關(guān)鍵索引文件的解析獲得視音頻編碼格式,然后通過解碼調(diào)用模塊打開相應(yīng)視音頻編碼格式的編碼,建立關(guān)鍵幀索引表。
所述的數(shù)據(jù)讀取模塊對(duì)本地及網(wǎng)絡(luò)文件提供一致的接口。所述的多媒體標(biāo)示信息包括視頻編碼格式、音頻編碼格式、寬高、平均碼流大小、視頻流標(biāo)識(shí)、視頻流數(shù)目和音頻流語(yǔ)言。所述的關(guān)鍵索引文件中包含關(guān)鍵幀的時(shí)間戳值、關(guān)鍵幀在主文件中的偏移值、關(guān)鍵幀在快進(jìn)輔助文件中的偏移值和關(guān)鍵幀在快退輔助文件中的偏移值。采用上述技術(shù)方案的本發(fā)明,具有以下優(yōu)點(diǎn)
(I)視頻點(diǎn)播放系統(tǒng)對(duì)多媒體文件格式無特別要求,對(duì)視頻音頻編碼格式無特別要求,能支持常見的多媒體文件格式如FLV、RM、RMVB, AVI、MP4、MOV、MKV, ASF、MP3等,對(duì)于一些開始播放所必要的信息在文件尾部不適宜網(wǎng)絡(luò)邊下載邊播放的文件,通過提取相關(guān)信息到輔助文件中,也能實(shí)現(xiàn)邊下載邊播放。(2)無需對(duì)數(shù)據(jù)源服務(wù)器做專門針對(duì)視頻點(diǎn)播的開發(fā)工作,使用一般的數(shù)據(jù)下載服務(wù),就能實(shí)現(xiàn)網(wǎng)絡(luò)點(diǎn)播,如apache等HTTP服務(wù)器,F(xiàn)TP服務(wù),samba服務(wù)等;只要數(shù)據(jù)源服務(wù)支持?jǐn)帱c(diǎn)續(xù)傳,就能實(shí)現(xiàn)特技播放。
圖I為本發(fā)明實(shí)施例I的流程圖。圖2為本發(fā)明實(shí)施例2中關(guān)鍵索引文件IDX的結(jié)構(gòu)圖。圖3為本發(fā)明實(shí)施例2中快進(jìn)輔助文件IF的結(jié)構(gòu)圖。圖4為本發(fā)明實(shí)施例2中快退輔助文件IB結(jié)構(gòu)圖。
具體實(shí)施例方式本發(fā)明中的方法是指數(shù)據(jù)源服務(wù)器對(duì)多媒體主文件進(jìn)行解析,得到多媒體的標(biāo)示信息,并將標(biāo)示信息寫入關(guān)鍵索引文件,快進(jìn)輔助文件和快退輔助文件三個(gè)輔助文件中,然后將三個(gè)輔助文件和多媒體主文件放置在數(shù)據(jù)源服務(wù)器上同級(jí)目錄下。當(dāng)點(diǎn)播節(jié)目時(shí),播放器終端可通過讀取關(guān)鍵索引文件獲取開始播放所需的信息,當(dāng)播放及快進(jìn)快退時(shí),分別通過下載緩沖并解析多媒體主文件、快進(jìn)輔助文件、快退輔助文件投遞其中解析出來的相應(yīng)的基本流。需要說明的是,上述的播放器終端與數(shù)據(jù)源服務(wù)器之間采用斷點(diǎn)續(xù)傳的網(wǎng)絡(luò)協(xié)議獲取多媒體主文件和三個(gè)輔助文件的數(shù)據(jù)流。關(guān)鍵索引文件的生成對(duì)多媒體文件進(jìn)行解析,對(duì)于大多數(shù)格式的多媒體文件而言,基本上在文件頭部開始部分,也有一部分格式的多媒體文件在文件尾部或其他部分。抽取其中對(duì)播放有用的多媒體標(biāo)識(shí)信息,如視頻編碼格式、音頻編碼格式、寬高、平均碼流大小、視頻流標(biāo)識(shí)、音頻流數(shù)目、音頻流語(yǔ)言等信息,這些信息針對(duì)不同格式文件,會(huì)有所不同。將這些信息按特定數(shù)據(jù)結(jié)構(gòu)組織起來,保存進(jìn)關(guān)鍵索引文件中。關(guān)鍵索引文件中還包含了所有關(guān)鍵幀的時(shí)間戳值、在主文件中的偏移、在快進(jìn)輔助文件中的偏移、在快退輔助文件中的偏移位置的信息,以下簡(jiǎn)稱關(guān)鍵幀索引表。
快進(jìn)輔助文件對(duì)多媒體文件進(jìn)行解析,讀取其關(guān)鍵幀數(shù)據(jù),按時(shí)間從早到晚的順序依序?qū)⑵渑c入本文件??焱溯o助文件對(duì)多媒體文件進(jìn)行解析,讀取其關(guān)鍵幀數(shù)據(jù),按時(shí)間從晚到早的順序?qū)㈥P(guān)鍵幀逆序?qū)懭氡疚募?br>
關(guān)鍵索引文件、快進(jìn)輔助文件、快退輔助文件的文件名分別為在多媒體文件名后加idx、if、ib,將輔助文件和多媒體文件放到服務(wù)器端同級(jí)目錄下。
在點(diǎn)播時(shí),終端播放器接收到播放指令,其中包含URL,其中有協(xié)議、服務(wù)器域名或IP、請(qǐng)求文件路徑及文件名信息。終端請(qǐng)求下載相應(yīng)的關(guān)鍵索引文件。本發(fā)明中,播放器終端包括網(wǎng)絡(luò)接口模塊、數(shù)據(jù)讀取模塊、解復(fù)用模塊、解碼調(diào)用模塊和硬解碼接口模塊;當(dāng)點(diǎn)播節(jié)目時(shí),數(shù)據(jù)讀取模塊通過網(wǎng)絡(luò)接口模塊讀取關(guān)鍵索引文件,從而獲取播放所需的信息,之后解復(fù)用模塊對(duì)多媒體主文件和輔助文件進(jìn)行解析,獲得視音頻幀;解碼調(diào)用模塊將視音頻幀通過硬解碼接口模塊投遞給硬件進(jìn)行解碼播放。網(wǎng)絡(luò)接口模塊分別針對(duì)TCP、UDP、HTTP、或RTSP協(xié)議等網(wǎng)絡(luò)協(xié)議進(jìn)行封裝,它們具有共同的接口,傳入U(xiǎn)RL地址,文件偏移及共享內(nèi)存對(duì)象的指針,調(diào)用開始(Start)方法,即開始向共享內(nèi)存中寫入數(shù)據(jù),調(diào)用停止(Stop)方法,即停止接收寫入數(shù)據(jù)。數(shù)據(jù)讀取模塊針對(duì)不同的數(shù)據(jù)源,如不同網(wǎng)絡(luò)協(xié)議或本地文件,為解復(fù)用模塊提供一致的數(shù)據(jù)讀取接口,使解復(fù)用不必關(guān)心數(shù)據(jù)的具體來源。對(duì)于網(wǎng)絡(luò)數(shù)據(jù)源,由于其數(shù)據(jù)寫入環(huán)形緩沖形式的共享內(nèi)存中,因此也可提供一定范圍內(nèi)的定位(Seek)操作,這樣允許解復(fù)用更加靈活的對(duì)文件進(jìn)行解析。解復(fù)用解析模塊對(duì)輔助文件、多媒體主文件進(jìn)行解析;對(duì)關(guān)鍵輔助文件的解析主要是獲取視音頻編碼格式,通過解碼調(diào)用模塊打開相應(yīng)的格式的解碼,建立關(guān)鍵幀索引表,在快進(jìn)時(shí),讀取快進(jìn)輔助文件,在快退時(shí),讀取快退輔助文件,在正常播時(shí),讀取主文件。分別為視音頻各開出一段緩沖,將視音頻幀及相關(guān)信息如時(shí)間戳,幀大小等信息封裝進(jìn)結(jié)構(gòu)體中,并寫入緩沖。解碼調(diào)用模塊主要負(fù)責(zé)將解復(fù)用解析模塊解析出的視音頻幀,通過調(diào)用硬解碼接口模塊,投遞給硬件進(jìn)行解碼播放。實(shí)施例I
本實(shí)施例主要闡述MP4文件的網(wǎng)絡(luò)播放,具體如下
在關(guān)鍵索引文件中存有以下信息moov元素開始位置、moov元素結(jié)束位置、視頻流數(shù)目、音頻流數(shù)目、視頻編碼格式、音頻編碼格式、關(guān)鍵幀總數(shù)、視頻寬高。前300秒內(nèi)的視音頻sample元素的索引表包含有pts時(shí)間戳,size大小,pos在主文件中的偏移位置,之所以只存儲(chǔ)前300秒的sample的索引是因?yàn)閙p4文件中stsz容器內(nèi)的sample索引信息,如果一個(gè)mp4文件時(shí)長(zhǎng)超過I小時(shí)甚至2小時(shí),則stsz的總大小有IM字節(jié),基于2M以上。而音視頻數(shù)據(jù)位于stsz之后,在視頻畫面展現(xiàn)之前,如果把mp4文件頭中的stsz下載完,則需要用戶等待相當(dāng)長(zhǎng)時(shí)間,如10至30秒,用戶體驗(yàn)不好,或者可能直接導(dǎo)致用戶認(rèn)為出現(xiàn)異常而終止播放。由所有關(guān)鍵幀索引項(xiàng)組成的關(guān)鍵幀索引表
關(guān)鍵巾貞索引項(xiàng)結(jié)構(gòu)為
typedef struct{
u32 id ;//關(guān)鍵巾貞序號(hào)
u32 pts ;//時(shí)間值
off_t mainf ;//在主文件中的偏移位置off_t iff ;//在IF快進(jìn)輔助文件中的偏移位置 off_t ibf ;//在IB快退輔助文件中的偏移位置 off_t sampIeIndex -J/ 在 samples 索引中的序號(hào) }Iframe ;
所有音視頻的Sample項(xiàng)組成的Samples索引信息表。MP4解復(fù)用模塊,在開始運(yùn)行時(shí),即啟動(dòng)三個(gè)線程,線程I通過網(wǎng)絡(luò)接口模塊獲取關(guān)鍵索引文件,將其寫入共享內(nèi)存,線程2則解析共享內(nèi)存中的數(shù)據(jù),解析完后線程I、線程
2自動(dòng)終止。線程3判斷當(dāng)拿到前300秒內(nèi)的視音頻sample元素的索引表后,直接請(qǐng)求主文件第一幀偏移位置開始的數(shù)據(jù),其流程見圖I。實(shí)施例2
本實(shí)施例主要闡述RM文件的點(diǎn)播,具體如下
如圖2所示的關(guān)鍵索引文件IDX,結(jié)構(gòu)如下
RIDX:自定義標(biāo)識(shí),用來識(shí)別該文件是否為IDX文件;
SIZE:該文件的大?。?br>
STREA_PR0P:媒體流相關(guān)信息; max_bitrate網(wǎng)絡(luò)傳輸時(shí)要求的最大比特率; avg_bitrate網(wǎng)絡(luò)傳輸時(shí)要求的平均比特率;
MAX_PACKET_SIZE:最大媒體數(shù)據(jù)包的大小(以字節(jié)計(jì)算);
AVG_PACKET_SIZE :平均媒體數(shù)據(jù)包的大小(以字節(jié)計(jì)算);
PACKET_C0UNT :媒體數(shù)據(jù)包個(gè)數(shù);
PRER0LL 回放之前的預(yù)留毫秒數(shù);
DURATION :媒體文件應(yīng)該播放的時(shí)間(以毫秒計(jì)算);
DATA_START :數(shù)據(jù)幀起始位置;
DATA_END :數(shù)據(jù)幀結(jié)束位置;
FILE_SIZE :原始文件大??;
VIDEO_STEAM_NUM :視頻流總個(gè)數(shù);
CODEC :編碼類型;
STREAM_NUM :視頻流號(hào);
WIDTH :視頻畫面寬度;
HEIGHT :視頻畫面高度;
PAD_WIDTH :視頻畫面水平填充像素?cái)?shù);
PAD_HEIGHT :視頻畫面垂直填充像素?cái)?shù);
BITS_PER_SEC :平均比特率;
FRAME_RATE :幀率;
C0DEC_DATA_LEN :編解碼私有數(shù)據(jù)長(zhǎng)度;
C0DEC_DATA :編解碼私 有數(shù)據(jù);
A_STREAM_NUM :音頻流總個(gè)數(shù);
STREAM_N0 :流號(hào);
CHANNEL :聲道數(shù);SAMPLE_RATE :采樣率;
BITS_PER_SEC :比特率;
BITS_PER_SAMPLE :每樣值比特?cái)?shù);
CODEC_DATA_LEN :編解碼私有數(shù)據(jù)長(zhǎng)度;
CODEC_DATA :編解碼私有數(shù)據(jù);
STREAM_NO :流索引序號(hào)標(biāo)識(shí);
INDEX_COUNT :索引條目總數(shù);
NEXT_INDEX_OFFSET :下一索引偏移位置;
TIMESTAMP :時(shí)間戳;
FILE_OFFSET :相應(yīng)幀在原始文件中的偏移位置;
RM_IF_OFFSET :相應(yīng)幀在IF文件中的偏移位置;
RM_IB_OFFSET :相應(yīng)幀在IB文件中的偏移位置??爝M(jìn)輔助文件IF的結(jié)構(gòu)如圖3所示
RMIF :為自定義標(biāo)識(shí),用來識(shí)別該文件是否為IF文件;
SIZE :該文件的大小;
KEY_FRAME_ENTRIES :關(guān)鍵幀條目;
FRAME_LENGTH(N):第N個(gè)關(guān)鍵幀的長(zhǎng)度;
FRAME_DATA(N):第N個(gè)關(guān)鍵幀的幀數(shù)據(jù);
PADDING_FLAG :0x5A,為一個(gè)字節(jié)的填充數(shù)據(jù)。如圖4所示,快退輔助文件IB結(jié)構(gòu)如下,需要說明的是,該文件結(jié)構(gòu)同快進(jìn)輔助文件相同,只不過幀是倒序排列?;谏鲜鋈齻€(gè)輔助文件,依據(jù)本發(fā)明的方法,即可實(shí)現(xiàn)RM文件的點(diǎn)播。除上述文件的結(jié)構(gòu)不同,使用Rm解復(fù)用模塊外,其他模塊及流程基本同實(shí)施例I。本發(fā)明內(nèi)容及上述實(shí)施例是提供給熟悉本領(lǐng)域內(nèi)的人員來實(shí)現(xiàn)或使用本發(fā)明的,熟悉本領(lǐng)域的人員可在不脫離本發(fā)明的發(fā)明思想的情況下,對(duì)上述實(shí)施例做出種種修改或變化,因而本發(fā)明的保護(hù)范圍并不被上述實(shí)施例所限,而應(yīng)是符合權(quán)利要求書提到的創(chuàng)新性特征的最大范圍。
權(quán)利要求
1.一種借助輔助文件實(shí)現(xiàn)多媒體文件網(wǎng)絡(luò)播放的方法,其特征在于數(shù)據(jù)源服務(wù)器對(duì)多媒體主文件進(jìn)行解析,得到多媒體的標(biāo)示信息,并將標(biāo)示信息寫入關(guān)鍵索引文件、快進(jìn)輔助文件和快退輔助文件三個(gè)輔助文件中,然后將三個(gè)輔助文件和多媒體主文件放置在數(shù)據(jù)源服務(wù)器上同級(jí)目錄下;所述的播放器終端包括網(wǎng)絡(luò)接口模塊、數(shù)據(jù)讀取模塊、解復(fù)用模塊、解碼調(diào)用模塊和硬解碼接口模塊;當(dāng)點(diǎn)播節(jié)目時(shí),數(shù)據(jù)讀取模塊通過網(wǎng)絡(luò)接口模塊讀取關(guān)鍵索引文件,從而獲取播放所需的信息,之后解復(fù)用模塊對(duì)多媒體主文件和輔助文件進(jìn)行解析,獲得視音頻幀;解碼調(diào)用模塊將視音頻幀通過硬解碼接口模塊投遞給硬件進(jìn)行解碼播放。
2.根據(jù)權(quán)利要求I所述的借助輔助文件實(shí)現(xiàn)多媒體文件網(wǎng)絡(luò)播放的方法,其特征在于所述的播放器終端與數(shù)據(jù)源服務(wù)器之間采用斷點(diǎn)續(xù)傳的網(wǎng)絡(luò)協(xié)議獲取多媒體主文件和三個(gè)輔助文件的數(shù)據(jù)流。
3.根據(jù)權(quán)利要求I所述的借助輔助文件實(shí)現(xiàn)多媒體文件網(wǎng)絡(luò)播放的方法,其特征在于在解復(fù)用模塊進(jìn)行解析時(shí),通過對(duì)關(guān)鍵索引文件的解析獲得視音頻編碼格式,然后通過解碼調(diào)用模塊打開相應(yīng)視音頻編碼格式的編碼,建立關(guān)鍵幀索引表。
4.根據(jù)權(quán)利要求I所述的借助輔助文件實(shí)現(xiàn)多媒體文件網(wǎng)絡(luò)播放的方法,其特征在于所述的數(shù)據(jù)讀取模塊對(duì)本地及網(wǎng)絡(luò)文件提供一致的接口。
5.根據(jù)權(quán)利要求I所述的借助輔助文件實(shí)現(xiàn)多媒體文件網(wǎng)絡(luò)播放的方法,其特征在于所述的多媒體標(biāo)示信息包括視頻編碼格式、音頻編碼格式、寬高、平均碼流大小、視頻流標(biāo)識(shí)、視頻流數(shù)目和首頻流語(yǔ)目。
6.根據(jù)權(quán)利要求I所述的借助輔助文件實(shí)現(xiàn)多媒體文件網(wǎng)絡(luò)播放的方法,其特征在于所述的關(guān)鍵索引文件中包含關(guān)鍵幀的時(shí)間戳值、關(guān)鍵幀在主文件中的偏移值、關(guān)鍵幀在快進(jìn)輔助文件中的偏移值和關(guān)鍵幀在快退輔助文件中的偏移值。
全文摘要
一種借助輔助文件實(shí)現(xiàn)多媒體文件網(wǎng)絡(luò)播放的方法,數(shù)據(jù)源服務(wù)器對(duì)多媒體主文件進(jìn)行解析,得到多媒體的標(biāo)示信息,并將標(biāo)示信息寫入關(guān)鍵索引文件、快進(jìn)輔助文件和快退輔助文件三個(gè)輔助文件中,然后將三個(gè)輔助文件和多媒體主文件放置在數(shù)據(jù)源服務(wù)器上同級(jí)目錄下;所述的播放器終端包括網(wǎng)絡(luò)接口模塊、數(shù)據(jù)讀取模塊、解復(fù)用模塊、解碼調(diào)用模塊和硬解碼接口模塊;當(dāng)點(diǎn)播節(jié)目時(shí),數(shù)據(jù)讀取模塊通過網(wǎng)絡(luò)接口模塊讀取關(guān)鍵索引文件,從而獲取播放所需的信息,之后解復(fù)用模塊對(duì)多媒體主文件和輔助文件進(jìn)行解析,獲得視音頻幀;解碼調(diào)用模塊將視音頻幀通過硬解碼接口模塊投遞給硬件進(jìn)行解碼播放。
文檔編號(hào)H04N21/643GK102625193SQ201110029240
公開日2012年8月1日 申請(qǐng)日期2011年1月27日 優(yōu)先權(quán)日2011年1月27日
發(fā)明者劉飛, 張 杰, 惠作奎, 肖佳敏, 賈小波, 趙宇峰 申請(qǐng)人:鄭州威科姆科技股份有限公司