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