本申請(qǐng)涉及通信技術(shù)領(lǐng)域,特別涉及一種基于DASH的多媒體內(nèi)容插入播放的方法和設(shè)備。
背景技術(shù):
超文本傳輸協(xié)議(HTTP)動(dòng)態(tài)自適應(yīng)流媒體標(biāo)準(zhǔn),簡稱DASH,可以在互聯(lián)網(wǎng)上提供傳統(tǒng)HTTP點(diǎn)播服務(wù)所不具備的高品質(zhì)多媒體內(nèi)容。其包括:可以根據(jù)當(dāng)前網(wǎng)絡(luò)帶寬狀態(tài),讓用戶選擇一條適合當(dāng)前帶寬情況的碼流進(jìn)行播放,并且在源內(nèi)容存在的情況下,可以讓用戶選擇不同的語言配合當(dāng)前的視頻播放。
DASH系統(tǒng)的工作原理是對(duì)同一多媒體文件準(zhǔn)備多種不同的分辨率以及不同語言的音頻,并將其切分成若干小的媒體片段,存儲(chǔ)在服務(wù)器上。
客戶端獲取媒體描述(MPD:Media Presentation Description)文件,客戶端可以根據(jù)MPD文件的描述獲得整個(gè)文件的播放時(shí)長、支持可選擇的碼流的種類、所支持的各種不同的分辨率、適應(yīng)的比特率等等多媒體信息,從而在播放過程中,客戶端可以根據(jù)這些信息動(dòng)態(tài)的選擇自己需要的小的媒體片段,播放出需要的效果。
現(xiàn)有的多媒體內(nèi)容插入方法通常是創(chuàng)建2個(gè)不同的播放器(player),第一player播放原始流的內(nèi)容,第二player播放插入的內(nèi)容。當(dāng)需要播放插入的內(nèi)容時(shí),將原始流內(nèi)容暫停,將第二player的畫面覆蓋第一player的畫面,播放插入內(nèi)容,插入的內(nèi)容播放完成后,再隱去第二player,將第一player的畫面繼續(xù)播放。
對(duì)于嵌入式環(huán)境,由于硬件資源的限制,通常只有一個(gè)硬件解碼器資源。該硬件解碼器在解碼原始流的時(shí)候,無法再解碼其他的多媒體資源,也就無法解碼要插入的內(nèi)容,而使用2個(gè)player做覆蓋播放時(shí),需要涉及到2個(gè)player之間的資源切換,以及相關(guān)資源的銷毀創(chuàng)建,在僅有一個(gè)硬件解碼器的情況下無法做到無縫播放,并且創(chuàng)建2個(gè)player將更加消耗資源。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)?zhí)峁┝艘环N基于DASH的多媒體內(nèi)容插入播放的方法和設(shè)備,以實(shí)現(xiàn)高效的無縫插入播放。
本申請(qǐng)公開了一種基于DASH的多媒體內(nèi)容插入播放的方法,包括:
獲取原始媒體描述MPD文件,對(duì)MPD文件進(jìn)行解析;
確定插入多媒體內(nèi)容的時(shí)間點(diǎn);其中,每一個(gè)待插入的多媒體內(nèi)容對(duì)應(yīng)一個(gè)時(shí)間點(diǎn);
根據(jù)每一個(gè)待插入的多媒體內(nèi)容的長度以及對(duì)應(yīng)的時(shí)間點(diǎn),分別在原始MPD文件中切分出對(duì)應(yīng)的Period;其中,每一個(gè)用于插入多媒體內(nèi)容的Period的起始時(shí)間為對(duì)應(yīng)的插入多媒體內(nèi)容的時(shí)間點(diǎn),長度為對(duì)應(yīng)的待插入的多媒體內(nèi)容的長度;
將每一個(gè)待插入的多媒體內(nèi)容分別獨(dú)立包裝,并分別插入所切分的對(duì)應(yīng)的Period中,得到擴(kuò)展后的MPD文件;
將擴(kuò)展后的MPD文件發(fā)送給DASH播放器;
DASH播放器對(duì)擴(kuò)展后的MPD文件進(jìn)行解析,并播放。
較佳的,該方法還包括對(duì)每一個(gè)待插入的多媒體內(nèi)容進(jìn)行以下預(yù)處理:
判斷所述待插入的多媒體內(nèi)容是否為MP4格式,如果不是MP4格式,將其轉(zhuǎn)換為MP4格式;
判斷所述待插入的多媒體內(nèi)容是否已經(jīng)碎片化為片段文件,如果沒有碎片化為片段文件,則對(duì)所述待插入的多媒體內(nèi)容進(jìn)行碎片化,并保存碎片化后的結(jié)果。
較佳的,對(duì)所述待插入的多媒體內(nèi)容進(jìn)行碎片化包括:
將待插入的多媒體內(nèi)容切割成長度小于或者等于15秒的片段文件,其中,片段文件的格式符合DASH段文件的相關(guān)規(guī)范。
較佳的,如果當(dāng)前插入多媒體內(nèi)容的時(shí)間點(diǎn)在原始MPD文件中的一個(gè)已有Period中,則所述在原始MPD文件中切分出對(duì)應(yīng)的Period包括:
以所述當(dāng)前插入多媒體內(nèi)容的時(shí)間點(diǎn)為界,將所述已有Period切分成兩個(gè)Period;
在所述兩個(gè)Period之間插入所述對(duì)應(yīng)的Period;
將所述兩個(gè)Period的起始時(shí)間及長度,以及所述對(duì)應(yīng)的Period的起始時(shí)間及長度寫入原始MPD文件中,并校正原始MPD文件中相關(guān)Period的起始時(shí)間。
本申請(qǐng)還公開了一種基于DASH的多媒體內(nèi)容插入播放的設(shè)備,包括:MPD預(yù)處理模塊,其中:
所述MPD預(yù)處理模塊,用于從DASH遠(yuǎn)程服務(wù)器獲取原始MPD文件,對(duì)MPD文件進(jìn)行解析;
并用于確定插入多媒體內(nèi)容的時(shí)間點(diǎn),其中,每一個(gè)待插入的多媒體內(nèi)容對(duì)應(yīng)一個(gè)時(shí)間點(diǎn);
還用于根據(jù)每一個(gè)待插入的多媒體內(nèi)容的長度以及對(duì)應(yīng)的時(shí)間點(diǎn),分別在原始MPD文件中切分出對(duì)應(yīng)的Period;其中,每一個(gè)用于插入多媒體內(nèi)容的Period的起始時(shí)間為對(duì)應(yīng)的插入多媒體內(nèi)容的時(shí)間點(diǎn),長度為對(duì)應(yīng)的待插入的多媒體內(nèi)容的長度;
最后將每一個(gè)待插入的多媒體內(nèi)容分別獨(dú)立包裝,并分別插入所切分的對(duì)應(yīng)的Period中,得到擴(kuò)展后的MPD文件,發(fā)送給DASH播放器;所述DASH播放器,用于對(duì)擴(kuò)展后的MPD文件進(jìn)行解析,并播放。
較佳的,所述MPD預(yù)處理模塊還用于對(duì)每一個(gè)待插入的多媒體內(nèi)容進(jìn)行以下預(yù)處理:
判斷所述待插入的多媒體內(nèi)容是否為MP4格式,如果不是MP4格式,將其轉(zhuǎn)換為MP4格式;
判斷所述待插入的多媒體內(nèi)容是否已經(jīng)碎片化為片段文件,如果沒有碎片化為片段文件,則對(duì)所述待插入的多媒體內(nèi)容進(jìn)行碎片化,并將碎片化后的結(jié)果保存到插入流緩存服務(wù)器;所述插入流緩存服務(wù)器,用于向DASH播放器提供所保存的文件。
較佳的,所述MPD預(yù)處理模塊按照以下方式對(duì)所述待插入的多媒體內(nèi)容進(jìn)行碎片化:
將待插入的多媒體內(nèi)容切割成長度小于或者等于15秒的片段文件,其中,片段文件的格式符合DASH段文件的相關(guān)規(guī)范。
較佳的,如果當(dāng)前插入多媒體內(nèi)容的時(shí)間點(diǎn)在原始MPD文件中的一個(gè)已有Period中,則,所述MPD預(yù)處理模塊按照以下方式在原始MPD文件中切分出對(duì)應(yīng)的Period:
以所述當(dāng)前插入多媒體內(nèi)容的時(shí)間點(diǎn)為界,將所述已有Period切分成兩個(gè)Period;
在所述兩個(gè)Period之間插入所述對(duì)應(yīng)的Period;
將所述兩個(gè)Period的起始時(shí)間及長度,以及所述對(duì)應(yīng)的Period的起始時(shí)間及長度寫入原始MPD文件中,并校正原始MPD文件中相關(guān)Period的起始時(shí)間。
由上述技術(shù)方案可見,本申請(qǐng)?zhí)峁┑幕贒ASH的多媒體內(nèi)容插入播放的方法和設(shè)備,通過擴(kuò)展原始MPD的方式,將需要插入的多媒體內(nèi)容插入到原始多媒體流中,從而可以在播放原始多媒體流的過程中,在插入點(diǎn)直接播放所插入的多媒體內(nèi)容,而無需創(chuàng)建第二player,不增加新的硬件投入,不修改已有的軟件代碼,也不會(huì)出現(xiàn)硬件資源切換的問題,從而可以更加高效的實(shí)現(xiàn)無縫插入播放。
附圖說明
圖1為本發(fā)明基于DASH的多媒體內(nèi)容插入播放設(shè)備的組成結(jié)構(gòu)示意圖;
圖2為本發(fā)明基于DASH的多媒體內(nèi)容插入播放方法的流程示意圖;
圖3為本發(fā)明對(duì)待插入多媒體內(nèi)容進(jìn)行切分并插入原始流的MPD文件的流程示意圖;
圖4為本發(fā)明實(shí)施例中在原始多媒體內(nèi)容中插入一段多媒體內(nèi)容的示意圖;
圖5為本發(fā)明實(shí)施例中在原始多媒體內(nèi)容中插入兩段多媒體內(nèi)容的示意圖。
具體實(shí)施方式
為使本申請(qǐng)的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)說明。
本發(fā)明針對(duì)現(xiàn)有技術(shù)的不足,提出一種新的方法,該方法使用擴(kuò)展原始MPD的方式,將需要插入的多媒體內(nèi)容插入到原始多媒體流中,這樣可以在播放原始多媒體流的過程中,在插入點(diǎn)直接播放所插入的多媒體內(nèi)容,而無需創(chuàng)建第二player,不增加新的硬件投入,不修改已有的軟件代碼,也不會(huì)出現(xiàn)硬件資源切換的問題,從而可以更加高效的實(shí)現(xiàn)無縫插入播放。
圖1為本發(fā)明基于DASH的多媒體內(nèi)容插入播放設(shè)備的組成結(jié)構(gòu)示意圖,圖1所示設(shè)備在現(xiàn)有設(shè)備的基礎(chǔ)上,在DASH播放器前增加一個(gè)MPD預(yù)處理模塊,該MPD預(yù)處理模塊用于按照本發(fā)明提供的方法對(duì)原始MPD文件進(jìn)行切分,并將待插入的多媒體內(nèi)容插入到需要插入的位置得到擴(kuò)展后的MPD文件,然后將擴(kuò)展后的MPD文件發(fā)送給DASH播放器進(jìn)行播放。
具體而言:所述MPD預(yù)處理模塊,用于從DASH遠(yuǎn)程服務(wù)器獲取原始MPD文件,對(duì)MPD文件進(jìn)行解析;
并用于確定插入多媒體內(nèi)容的時(shí)間點(diǎn),其中,每一個(gè)待插入的多媒體內(nèi)容對(duì)應(yīng)一個(gè)時(shí)間點(diǎn);
還用于根據(jù)每一個(gè)待插入的多媒體內(nèi)容的長度以及對(duì)應(yīng)的時(shí)間點(diǎn),分別在原始MPD文件中切分出對(duì)應(yīng)的Period;其中,每一個(gè)用于插入多媒體內(nèi)容的Period的起始時(shí)間為對(duì)應(yīng)的插入多媒體內(nèi)容的時(shí)間點(diǎn),長度為對(duì)應(yīng)的待插入的多媒體內(nèi)容的長度;
最后將每一個(gè)待插入的多媒體內(nèi)容分別獨(dú)立包裝,并分別插入所切分的對(duì)應(yīng)的Period中,得到擴(kuò)展后的MPD文件,發(fā)送給DASH播放器;
所述DASH播放器,用于對(duì)擴(kuò)展后的MPD文件進(jìn)行解析,并播放。
較佳的,所述MPD預(yù)處理模塊還用于對(duì)每一個(gè)待插入的多媒體內(nèi)容進(jìn)行以下預(yù)處理:
判斷所述待插入的多媒體內(nèi)容是否為MP4格式,如果不是MP4格式,將其轉(zhuǎn)換為MP4格式;
判斷所述待插入的多媒體內(nèi)容是否已經(jīng)碎片化為片段文件,如果沒有碎片化為片段文件,則對(duì)所述待插入的多媒體內(nèi)容進(jìn)行碎片化,并將碎片化后的結(jié)果保存到插入流緩存服務(wù)器;
所述插入流緩存服務(wù)器,用于向DASH播放器提供所保存的文件。
較佳的,所述MPD預(yù)處理模塊按照以下方式對(duì)所述待插入的多媒體內(nèi)容進(jìn)行碎片化:將待插入的多媒體內(nèi)容切割成長度小于或者等于15秒的片段文件,其中,片段文件的格式符合ISO-14496以及ISO-IEC-23009-1中對(duì)DASH的段文件的規(guī)范。
較佳的,如果當(dāng)前插入多媒體內(nèi)容的時(shí)間點(diǎn)在原始MPD文件中的一個(gè)已有Period中,則,所述MPD預(yù)處理模塊按照以下方式在原始MPD文件中切分出對(duì)應(yīng)的Period:
以所述當(dāng)前插入多媒體內(nèi)容的時(shí)間點(diǎn)為界,將所述已有Period切分成兩個(gè)Period;
在所述兩個(gè)Period之間插入所述對(duì)應(yīng)的Period;
將所述兩個(gè)Period的起始時(shí)間及長度,以及所述對(duì)應(yīng)的Period的起始時(shí)間及長度寫入原始MPD文件中,并校正原始MPD文件中相關(guān)Period的起始時(shí)間。
圖2為本發(fā)明基于DASH的多媒體內(nèi)容插入播放方法的流程圖,如圖2所示,該方法包括:
步驟100,讀取一段或者多段待插入原始流的多媒體內(nèi)容。
該多媒體內(nèi)容一般為MP4格式,如果為其他格式,需要將其轉(zhuǎn)換為MP4格式,可以采用現(xiàn)有相關(guān)的轉(zhuǎn)換方法進(jìn)行轉(zhuǎn)換,本發(fā)明不再贅述。
步驟200,檢查讀取的MP4格式的待插入原始流的多媒體內(nèi)容是否已經(jīng)碎片化為片段文件,如果沒有碎片化為片段文件,則需要進(jìn)行步驟300的碎片化工作,如果已經(jīng)碎片化為片段文件,則跳過步驟300,執(zhí)行步驟400。
本步驟中所描述的碎片化的含義為:此MP4格式的待插入原始流的多媒體內(nèi)容是否已經(jīng)被切割成多個(gè)片段(segment),每個(gè)片段(segment)單獨(dú)保存為一個(gè)文件。碎片化后的文件格式需要符合ISO-14496以及ISO-IEC-23009-1中對(duì)Dash的段文件的一系列規(guī)范。
步驟300,對(duì)待插入原始流的多媒體內(nèi)容進(jìn)行碎片化,得到若干片段文件。
碎片化之后的文件需要滿足之前所述的協(xié)議規(guī)范,具體碎片化的操作是:將指定文件切割成不大于15s的片段文件,將每個(gè)文件都保存在圖1所示的插入流緩存服務(wù)器上。
步驟400,在Dash播放器獲取遠(yuǎn)程Dash服務(wù)器的MPD文件的過程中,截取MPD文件,并解析MPD文件中的各種信息。
步驟500,獲取插入多媒體內(nèi)容的時(shí)間點(diǎn)。這里,插入多媒體內(nèi)容的時(shí)間點(diǎn)記為需要插入多媒體內(nèi)容的時(shí)間點(diǎn)。
步驟600,根據(jù)步驟500獲得的插入多媒體內(nèi)容的時(shí)間點(diǎn)以及待插入的多媒體內(nèi)容的長度,在原始MPD文件中切分出對(duì)應(yīng)的Period。
步驟700,將每個(gè)待插入的多媒體內(nèi)容各自獨(dú)立包裝成新的Period,分別插入步驟600所切分的對(duì)應(yīng)的Period中。
步驟600和步驟700的具體實(shí)施方式將在描述完本流程后,結(jié)合圖3和圖4進(jìn)行詳細(xì)描述。
步驟800,完成對(duì)原始MPD文件的切分,以及對(duì)待插入多媒體內(nèi)容的插入后,生成新的擴(kuò)展MPD文件發(fā)給后續(xù)的Dash播放器。
步驟900,Dash播放解析擴(kuò)展的MPD,并播放。
圖3為本發(fā)明對(duì)原始流的MPD文件進(jìn)行切分,并將待插入多媒體內(nèi)容插入切分后的MPD文件的流程示意圖,圖3所示流程包括以下步驟:
步驟1000,讀取MPD文件,確定所有Period的起始時(shí)間以及時(shí)長。
步驟2000,按時(shí)間先后順序遍歷所有的Period,檢查需要插入多媒體內(nèi)容的時(shí)間點(diǎn)T是否在當(dāng)前的Period范圍內(nèi),如果需要插入多媒體內(nèi)容的時(shí)間點(diǎn)T不在當(dāng)前的Period范圍內(nèi),進(jìn)入步驟3000,如果需要插入多媒體內(nèi)容的時(shí)間點(diǎn)T在當(dāng)前的Period范圍內(nèi),進(jìn)入步驟4000。
例如,參見圖4,假設(shè)定位到時(shí)間點(diǎn)T所在的Period,該P(yáng)eriod的起始時(shí)間為0,其長度為T2。
步驟3000,將當(dāng)前Period的下一個(gè)period作為當(dāng)前Period,返回步驟2000。
步驟4000,將當(dāng)前的Period切分為2個(gè)period,PeriodA和PeriodB,其中,PeriodA的文件片段(segment)長度為T,PeriodB文件片段(segment)的長度為原始Period時(shí)長除去PeriodA的時(shí)長所剩下的時(shí)間T2-T,如圖4所示。
步驟5000,在PeriodA和PeriodB中間插入PeriodC。
步驟6000,在PeriodC中添加需要插入的多媒體內(nèi)容列表。需要注意的是,如果插入的多媒體內(nèi)容與之前的Period的解碼參數(shù)一致,則可以省略插入初始化段(init segment),如果不一致,則需要在PeriodC的起始時(shí)間添加相應(yīng)的初始化段。如此,可以做到無縫播放2個(gè)完全不同的多媒體數(shù)據(jù)。
步驟7000,修改PeriodC的Period@Start值為T,Period@duration值為offset,修改PeriodB的Period@start值為T+offset,Period@duration值為T2-T。本步驟主要是校正原始MPD文件中相關(guān)Period的起始時(shí)間信息。
步驟8000,檢查是否還有其他需要插入多媒體內(nèi)容的位置,如果有跳到步驟2000,否則結(jié)束。
圖5給出了一個(gè)在原始多媒體內(nèi)容中插入兩段多媒體內(nèi)容的示意圖,假設(shè)需要插入的兩段多媒體內(nèi)容的長度分別為offset1和offset2,插入的時(shí)間點(diǎn)分別為T1和T2,其實(shí)現(xiàn)方法與上述流程圖3類似,在此不再贅述。
以上所述僅為本申請(qǐng)的較佳實(shí)施例而已,并不用以限制本申請(qǐng),凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)保護(hù)的范圍之內(nèi)。