專利名稱:基于單輸入接口的mpeg2文件實時播放的方法
技術(shù)領(lǐng)域:
本發(fā)明是一種實現(xiàn)單輸入接口IP機頂盒中的MPEG2流媒體文件,進行下載并實時播放的方法。
背景技術(shù):
目前由于網(wǎng)絡(luò)帶寬、硬件本身處理能力和協(xié)議規(guī)范等方面的限制,從網(wǎng)絡(luò)媒體下載大量的音、視頻多媒體數(shù)據(jù),對下載時間和存儲空間都有很高的要求。對于存儲空間比較小,對實時性要求比較高的單輸入接口IP機頂盒來說,這一矛盾就顯得尤為突出。
現(xiàn)有采用的流媒體技術(shù)很好地解決了這一難題。流是近年在網(wǎng)絡(luò)上出現(xiàn)的新概念,主要是指通過網(wǎng)絡(luò)傳輸多媒體數(shù)據(jù)的技術(shù)總稱。
流媒體則包含廣義和狹義兩種內(nèi)涵廣義上的流媒體,指的是使音頻和視頻形成穩(wěn)定和連續(xù)的傳輸流和回放流的一系列技術(shù)、方法和協(xié)議的總稱,即流媒體技術(shù);狹義上的流媒體,是相對于傳統(tǒng)的下載-回放方式而言的,指的是一種從網(wǎng)絡(luò)上獲取音頻和視頻等多媒體數(shù)據(jù)的新方法,其能夠支持多媒體數(shù)據(jù)流的實時傳輸和實時播放。通過流媒體技術(shù),服務(wù)器能夠向客戶端發(fā)送穩(wěn)定和連續(xù)的多媒體數(shù)據(jù)流,客戶端在接收數(shù)據(jù)的同時以一個穩(wěn)定的速率回放,而不用等數(shù)據(jù)全部下載完之后再進行回放,即實現(xiàn)一種實時播放的模式。
目前流媒體傳輸主要采用的是RTSP,RTP/RTCP協(xié)議。RTP協(xié)議在傳輸時將音、視頻數(shù)據(jù)進行分開傳輸,這樣客戶端接收到的數(shù)據(jù)包括獨立的音、視頻文件,因此一般的軟件播放器采用音、視頻分別接收和解碼的方法,如后附圖3所示。而且,現(xiàn)有專門用于支持播放流媒體的硬件解碼芯片較少,一般硬件解碼芯片只支持單接口的本地文件播放,因此這類解碼器是無法針對RTP協(xié)議傳輸數(shù)據(jù)進行解碼和實時播放的。
發(fā)明內(nèi)容
本發(fā)明所述基于單輸入接口的MPEG2文件實時播放的方法,其目的在于解決上述問題而針對現(xiàn)有單輸入接口解碼芯片,將經(jīng)過RTSP,RTP/RTCP傳輸協(xié)議分離的音、視頻數(shù)據(jù)參考MPEG2 PS流系統(tǒng)文件組織格式,合成類似MPEG2系統(tǒng)格式的數(shù)據(jù)流文件,從而實現(xiàn)在單輸入接口IP機頂盒中進行MPEG2流媒體文件的下載和實時播放。
所述基于單輸入接口的MPEG2文件實時播放的方法,是針對RTP數(shù)據(jù)文件的封裝過程而采取一種與之相反的過程,即在解碼器上實現(xiàn)由RTP包還原成MPEG流。
根據(jù)RFC3550和RFC2250,流媒體服務(wù)器端MPEG流封裝成RTP協(xié)議包時,一個視頻RTP包,是由RTP固定包頭、MPEG視頻特定標頭(可能有擴展頭)、RTP有效載荷三部分構(gòu)成的。一個音頻RTP包,是由RTP固定包頭、MPEG音頻特定標頭、RTP有效載荷三部分構(gòu)成的。
上述過程實際上是對MPEG2進行系統(tǒng)層解析的過程,即從MPEG流中搜索一些重要的信息填充到RTP包中幾個重要的數(shù)據(jù)結(jié)構(gòu)中,同時根據(jù)已有的規(guī)范來完成一個RTP包的封裝。
而所述基于單輸入接口的MPEG2文件實時播放的方法,是根據(jù)RTP包中的重要數(shù)據(jù)完成解碼器進行實時播放,而實現(xiàn)MPEG2流媒體的PACK和PACKET頭部數(shù)據(jù)填充,并按RTP序列號緩存重組得到的基本數(shù)據(jù)流,形成完整的MPEG2數(shù)據(jù)格式后,送入解碼器進行解碼、播放。
經(jīng)過RTP傳輸后得到的分離媒體數(shù)據(jù)與本地文件的復(fù)用數(shù)據(jù)相比,一方面缺少了原來整個MPEG2文件的頭部信息;另一方面,MPEG2文件中的PACK頭部信息也沒有傳輸,只是將某些字段映射到RTP頭部。
所述基于單輸入接口的MPEG2文件實時播放的方法,根據(jù)RTSP流傳輸中一些控制信息獲得文件解碼信息,用來初始化硬件解碼器;通過RTSP協(xié)議獲得文件的SDP(Session Description Protocol,即會話描述協(xié)議)中得到媒體的類型、編碼格式和持續(xù)時間等信息參數(shù)。其中,SDP用于說明一個流媒體會話的基本屬性,包括媒體類型和編碼格式、所需要的傳輸帶寬、播放的時間范圍、所需Buffer信息等。
根據(jù)MPEG2標準文件格式填充每幀數(shù)據(jù)的PACK和PACKET頭部,通過RTP包的包頭得到編碼格式和時間戳;
根據(jù)MPEG2 PS文件標準(即ISO/IEC 13818標準)填充相應(yīng)的文件頭信息,形成完整的文件頭部格式,并按RTP序列號緩存重組得到的基本數(shù)據(jù)流,并通過緩存送到硬件解碼器。
如上述內(nèi)容,從硬件解碼器的角度來看,重新組成的MPEG2數(shù)據(jù)與本地播放的文件格式?jīng)]有本質(zhì)區(qū)別,從而可由現(xiàn)有的解碼器對經(jīng)過RTP傳輸后得到的分離媒體數(shù)據(jù)進行下載、重組和實時播放。
所述基于單輸入接口的MPEG2文件實時播放的方法,其實現(xiàn)流程是第一步,通過RTSP協(xié)議傳輸?shù)腟DP信息解析出解碼器實時播放需要的文件信息參數(shù)。
從SDP信息中可以獲取的信息參數(shù)包括有,文件類型,持續(xù)時間,音頻,視頻的編碼格式,采樣頻率,最大速率等,上述參數(shù)用來初始化硬件解碼器。
第二步,從網(wǎng)絡(luò)服務(wù)器接收包含流媒體數(shù)據(jù)的RTP包。
針對參考信息,首先根據(jù)RTP包中的負載類型,來區(qū)分是音頻還是視頻數(shù)據(jù);然后根據(jù)RTP包中包含的序列號,從RTP包中提取媒體數(shù)據(jù)并進行重組;重組后的音頻、視頻數(shù)據(jù)文件是按順序排列好的基本流,但此時仍不是完整的、具有邏輯意義的PACK文件,因此直接送給解碼器是無法解碼和實時播放的。
第三步,將音頻、視頻數(shù)據(jù)的每一幀都附加一個PACK頭部。
第四步,在音頻、視頻數(shù)據(jù)的每一個幀前再分別增加上一個PACKET頭部,以表明其是音頻幀、還是視頻幀,并且根據(jù)SDP信息填充緩沖區(qū)字段。
根據(jù)RTP包頭中的時間戳信息填充顯示時間戳PTS字段,其它的PACKET頭部的字段按照固定格式填入相應(yīng)的位信息。
第五步,將修改后的數(shù)據(jù)緩存,通過與硬件解碼器的交互送入解碼器進行解碼,并將帶有完整的MPEG2系統(tǒng)文件頭部格式的數(shù)據(jù)進行實時播放。
如上述方法步驟所示,在實現(xiàn)MPEG2流媒體數(shù)據(jù)PACK和PACKET頭部填充的過程中,MPEG2流媒體數(shù)據(jù)中的PACK數(shù)據(jù)碼、復(fù)用速率、系統(tǒng)目標解碼器緩沖區(qū)數(shù)據(jù)均從SDP信息中獲取得到。
MPEG2流媒體數(shù)據(jù)中的流類型和顯示時間戳,直接從RTP頭部映射獲得。
如上述方法步驟所示,在音頻或視頻數(shù)據(jù)的每一幀前附加PACK頭部時,復(fù)用速率由以下表達式得出 其中,音頻速率和視頻速率是由SDP信息中“a=AvgBitRate:integer”字段中得出;PACKET長度為固定值,是由SDP信息中(a=AvgPacketSize:integer)字段中得到。
所述單輸入接口的MPEG2文件實時播放的方法,其優(yōu)點是可基于現(xiàn)有播放本地文件的解碼芯片實時播放流媒體文件,不僅降低了系統(tǒng)設(shè)計和硬件投入成本,而且在不增加計算量的情況下實現(xiàn)視頻點播功能。
圖1是RTSP協(xié)議中的SDP描述;圖2是RTP頭部格式示意圖;圖3是現(xiàn)有RTP數(shù)據(jù)傳輸和解碼流程示意圖;圖4是MPEG2流媒體數(shù)據(jù)的PACK示意圖;圖5是MPEG2流媒體數(shù)據(jù)的PACKET示意圖;圖6是根據(jù)本發(fā)明所述方法實現(xiàn)MPEG2流媒體數(shù)據(jù)PACK和PACKET頭部填充示意圖;圖7是本發(fā)明所述解碼芯片的實時播放流程圖。
具體實施例方式
實施例1,如附圖所示,所述基于單輸入接口的MPEG2文件實時播放的方法步驟如下第一步,通過RTSP協(xié)議傳輸?shù)腟DP信息解析出解碼器實時播放需要的文件信息參數(shù)。
從SDP信息中可以獲取的信息參數(shù)包括有,文件類型,持續(xù)時間,音頻、視頻的編碼格式,采樣頻率,最大速率等,上述參數(shù)用來初始化硬件解碼器。
如圖1所示,SDP中的下列參數(shù)可以獲得的播放支持信息有“m=(媒體名稱和傳輸?shù)刂?”字段獲得媒體類型和編碼格式;“a=*(0個或多個會話屬性行)”字段的格式是a=<屬性>:<值>,其中屬性包括有,持續(xù)時間、采樣頻率、最大速率、視頻的寬高,音頻的通道個數(shù)等;第二步,從網(wǎng)絡(luò)服務(wù)器接收包含流媒體數(shù)據(jù)的RTP包。
如圖2所示,在RTP包中包括有如下參考信息,“Ver”為RTP協(xié)議版本號;“P”用于標志該RTP包的末尾是否包含有附加信息;“X”用于標志是否存在擴展頭部;“CC”用于標志在固定頭部后存在多少個CSRC標記;“M”是標志位;“負載類型”標記RTP包中所攜帶信息的類型;“SSRC”用于標識數(shù)據(jù)源;“CSRC”標識貢獻的數(shù)據(jù)源。
針對上述參考信息,首先根據(jù)RTP包中的負載類型,來區(qū)分是音頻還是視頻數(shù)據(jù);然后根據(jù)RTP包中包含的序列號,從RTP包中提取媒體數(shù)據(jù)并進行重組;重組后的音頻、視頻數(shù)據(jù)文件是按順序排列好的基本流。
第三步,將音頻、視頻數(shù)據(jù)的每一幀都附加一個PACK頭部。
如圖4所示,PACK頭部的起始碼設(shè)置為是00 00 01 BA;接著填充2個固定位‘01’;隨后的46bit是系統(tǒng)參考時鐘,表示送入系統(tǒng)目標解碼器的時間;除了中間穿插的標志位以外的各位均填充為0;這是因為我們采用人工送入的方式,解碼的時間依賴于人工送入的時間,因此填充為0不會影響解碼器正常解碼;然后是24位的復(fù)用速率,表明碼流進入解碼器的速率,復(fù)用速率由下述表達式推算得出
其中,音頻速率和視頻速率是由SDP信息中“a=AvgBitRate:integer”字段中得出;PACKET長度為固定值,是由SDP信息中(a=AvgPacketSize:integer)字段中得到。
后面的保留位全部設(shè)置為1,同時不需要填充字節(jié),所以后面的表示填充字節(jié)長度的3個字節(jié)填充為0。
第四步,在音頻、視頻數(shù)據(jù)的每一個幀前再分別增加上一個PACKET頭部,以表明其是音頻幀、還是視頻幀、以及解碼時間等。
根據(jù)RTP包頭中的PT字段填充幀的類型,根據(jù)RTP包頭中的時間戳信息填充PTS字段,其它PACKET頭部的字段按照固定格式填入相應(yīng)的位信息。
具體地,如圖5所示,PACKET頭部的起始碼前綴是00 00 01;接下來的8個bit是stream_id,表示流的類型;若為音頻幀則填充為C0;若為視頻幀則填充為E0;接著16位是PACKET長度(packet_length),通過計算包頭長度加數(shù)據(jù)長度獲得;然后填充2個固定位‘10’,同時將其后的標志位PES_scrambling_control(加密控制)、PES_priority(負載優(yōu)先級)、data_alignment_indicator(緊跟在PES分組頭部后的訪問單元數(shù)據(jù)類型)、ESCR_flag(是否有ESCR字段)、ES_rate_flag(是否有ES_rate字段)、以及PES_CRC_flag(是否有CRC字段)等位設(shè)置為‘0’;標志位PES_extension_flag設(shè)置為1,表明此PACKET頭后面存在一個擴展域;PTS_DTS_flags設(shè)置為‘10’,表明后面的時間戳是PTS。
接著下一個字節(jié),表示PACKET頭部中可選區(qū)域的數(shù)據(jù)長度,設(shè)為5,即PTS的長度為5個字節(jié)。
接下來填充4個固定bit‘0010’,表明后面是解碼時間戳PTS;然后將RTP包頭中的時間戳映射成PTS;由于前面設(shè)置標志位PES_extension_flag為1,所以存在有下列擴展域標志位PES_private_data_flag、pack_header_field_flag、program_packet_sequence_counter_flag均設(shè)置為0;標志位P-STD_buffer_flag置為1;然后是3bit保留位,全部置0;標志位PES_extension_flag_2置1,標志后面有PES_extension_field_length字段;隨后填充2個固定位‘01’,表明后面跟著的是系統(tǒng)目標解碼器緩沖區(qū)縮放因子P-STD_buffer_scale(1個bit)和系統(tǒng)目標解碼器緩沖區(qū)的大小P-STD_buffer_size(13個bit);對于P-STD_buffer_scale字段,若為音頻幀則填充為0;若為視頻幀,則填充為1;對于P-STD_buffer_size字段,其表示解碼器緩沖區(qū)的大小,填充時首先判斷視頻的寬(a=Width:integer)和高(a=Height:integer)的大小(由SDP中獲得)。如果寬小于等于320,高小于等于240,則整個16位(2比特固定位‘01’+1比特P-STD_buffer_scale+13比特P-STD_buffer_size)音頻填充為“40 20”,視頻則填充為“60 2E”;如果不滿足此約定,則視頻緩沖區(qū)大小則從[64×1024]、以及 中取較大的一個,其中,Rvmax是最大視頻速率,其從SDP信息的“a=MaxBitRate:integer”字段中獲得;音頻緩沖區(qū),最大取32×128字節(jié)。
由于前面標志位PES_extension_flag_2設(shè)置為1,所以接下來是PES_extension_field_length字段,通過計算擴展域的長度來填充。
第五步,將修改后的數(shù)據(jù)緩存,通過與硬件解碼器的交互送入解碼器進行解碼,并將帶有完整的MPEG2系統(tǒng)文件頭部格式的數(shù)據(jù)進行實時播放。
如圖6和上述方法步驟所示,在實現(xiàn)MPEG2流媒體數(shù)據(jù)PACK和PACKET頭部填充的過程中,MPEG2流媒體數(shù)據(jù)中的PACK數(shù)據(jù)碼、復(fù)用速率、系統(tǒng)目標解碼器緩沖區(qū)數(shù)據(jù)均從SDP信息中獲取得到。
MPEG2流媒體數(shù)據(jù)中的流類型和顯示時間戳,直接從RTP頭部映射獲得。
如圖7所示,應(yīng)用支持單接口、本地文件播放的解碼器,如本發(fā)明所述的MPEG2文件實時播放的方法,首先,進行硬件初始化;然后,通過RTSP協(xié)議獲取SDP信息并分析解碼器需要的支持播放信息;隨后,解碼器通過交互判斷是否可以解碼;若可以解碼,則利用RTP/RTCP協(xié)議接收數(shù)據(jù),在實現(xiàn)MPEG2流媒體數(shù)據(jù)PACK和PACKET頭部填充后,根據(jù)標志位向解碼器中交互送入音、視頻數(shù)據(jù),以進行解碼和實時播放的;上述過程直至完成全部數(shù)據(jù)被解碼和播放。
權(quán)利要求
1.一種基于單輸入接口的MPEG2文件實時播放的方法,其特征在于根據(jù)RTSP流傳輸中一些控制信息獲得文件解碼信息,用來初始化硬件解碼器;通過RTSP協(xié)議獲得文件的SDP中得到相關(guān)信息參數(shù);根據(jù)MPEG2標準文件格式填充每幀數(shù)據(jù)的PACK和PACKET頭部,通過RTP包的包頭得到編碼格式和時間戳;根據(jù)MPEG2文件標準填充相應(yīng)的文件頭信息,形成完整的文件頭部格式,并按RTP序列號緩存重組得到的基本數(shù)據(jù)流,并通過緩存送到硬件解碼器。
2.根據(jù)權(quán)利要求1所述的基于單輸入接口的MPEG2文件實時播放的方法,其特征在于所述MPEG2文件實時播放的方法流程是,第一步,通過RTSP協(xié)議傳輸?shù)腟DP信息解析出解碼器實時播放需要的文件信息參數(shù);第二步,從網(wǎng)絡(luò)服務(wù)器接收包含流媒體數(shù)據(jù)的RTP包;針對參考信息,首先根據(jù)RTP包中的負載類型,來區(qū)分是音頻還是視頻數(shù)據(jù);然后根據(jù)RTP包中包含的序列號,從RTP包中提取媒體數(shù)據(jù)并進行重組;重組后的音頻、視頻數(shù)據(jù)文件是按順序排列好的基本流;第三步,將音頻、視頻數(shù)據(jù)的每一幀都附加一個PACK頭部;第四步,在音頻、視頻數(shù)據(jù)的每一個幀前再分別增加上一個PACKET頭部,以表明其是音頻幀、還是視頻幀,并且根據(jù)SDP信息填充緩沖區(qū)字段;根據(jù)RTP包頭中的時間戳信息填充顯示時間戳PTS字段,其它的PACKET頭部的字段按照固定格式填入相應(yīng)的位信息;第五步,將修改后的數(shù)據(jù)緩存,通過與硬件解碼器的交互送入解碼器進行解碼,并將帶有完整的MPEG2系統(tǒng)文件頭部格式的數(shù)據(jù)進行實時播放。
3.根據(jù)權(quán)利要求2所述的基于單輸入接口的MPEG2文件實時播放的方法,其特征在于在實現(xiàn)MPEG2流媒體數(shù)據(jù)PACK和PACKET頭部填充的過程中,MPEG2流媒體數(shù)據(jù)中的PACK數(shù)據(jù)碼、復(fù)用速率、系統(tǒng)目標解碼器緩沖區(qū)數(shù)據(jù)均從SDP信息中獲取得到;MPEG2流媒體數(shù)據(jù)中的流類型和顯示時間戳,直接從RTP頭部映射獲得。
4.根據(jù)權(quán)利要求3所述的基于單輸入接口的MPEG2文件實時播放的方法,其特征在于在音頻或視頻數(shù)據(jù)的每一幀前附加PACK頭部時,復(fù)用速率由以下表達式得出, 其中,音頻速率和視頻速率是由SDP信息中“a=AvgBitRateinteger”字段中得出;PACKET長度為固定值,是由SDP信息中(a=AvgPacketSizeinteger)字段中得到。
全文摘要
本發(fā)明所述基于單輸入接口的MPEG2文件實時播放的方法,針對現(xiàn)有單輸入接口解碼芯片將經(jīng)過RTSP,RTP/RTCP傳輸協(xié)議分離的音、視頻數(shù)據(jù),合成類似MPEG2 PS系統(tǒng)格式的數(shù)據(jù)流文件,從而實現(xiàn)在單輸入接口中進行MPEG2流媒體文件的下載和實時播放。所述基于單輸入接口的MPEG2文件實時播放的方法,是針對RTP數(shù)據(jù)文件的封裝過程而采取一種與之相反的過程,即在解碼器上實現(xiàn)由RTP包還原成MPEG流。
文檔編號H04L29/06GK1972444SQ20051004544
公開日2007年5月30日 申請日期2005年11月27日 優(yōu)先權(quán)日2005年11月27日
發(fā)明者劉琚, 胥長彬, 喬建蘋, 李玉軍, 周鵬 申請人:海信集團有限公司