面向多屏的場景自適應(yīng)的數(shù)據(jù)封裝方法和裝置及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種面向多屏的場景自適應(yīng)的數(shù)據(jù)封裝方法和裝置及系統(tǒng)。其中,數(shù)據(jù)封裝方法包括:檢測客戶端的屬性信息,所述屬性信息用于反映所述客戶端對多媒體數(shù)據(jù)封裝的解析能力,所述多媒體數(shù)據(jù)包括音頻數(shù)據(jù)和/或視頻數(shù)據(jù);由所述屬性信息確定所述客戶端對應(yīng)的封裝參數(shù);根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝;以及將封裝后的數(shù)據(jù)輸出至所述客戶端。通過本發(fā)明,解決了無法針對不同的客戶端進行數(shù)據(jù)封裝的問題,達(dá)到了針對不同的客戶端的解析能力對多媒體數(shù)據(jù)進行封裝減少數(shù)據(jù)封裝引起的額外開銷的效果。
【專利說明】面向多屏的場景自適應(yīng)的數(shù)據(jù)封裝方法和裝置及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)封裝領(lǐng)域,具體而言,涉及一種面向多屏的場景自適應(yīng)的數(shù)據(jù)封裝方法和裝置及系統(tǒng)。
【背景技術(shù)】
[0002]隨著移動終端的發(fā)展,播放終端的多樣化趨勢已不可避免。而不同播放終端允許接收的音視頻數(shù)據(jù)的封裝格式也有所差異,如=PC上Flash播放器可以接收RTMP格式和HDS格式,1S以及Android高于4.0版本的手機和平板可以接收HTTP LiveStreaming(HLS)格式,Android低于4.0版本的手機和平板可以接收RTP格式。這些數(shù)據(jù)封裝類型均有與之對應(yīng)的標(biāo)準(zhǔn)協(xié)議描述。數(shù)據(jù)的封裝和解封裝,指的是數(shù)據(jù)從編碼端傳遞到播放端時,需要經(jīng)過多個協(xié)議層,在編碼端,從最高層的應(yīng)用層到最底層的物理層,每一層中又包含一個或多個協(xié)議層,數(shù)據(jù)每向下經(jīng)過一個協(xié)議層時,均要在數(shù)據(jù)之上添加對應(yīng)的頭或尾作為協(xié)議的控制信息,然后傳遞給下一層協(xié)議層,稱之為數(shù)據(jù)的封裝,而在解碼端,每向上通過一個協(xié)議層,則將協(xié)議的控制信息剝離,再把剩下的數(shù)據(jù)向上傳遞給上一層協(xié)議,稱之為數(shù)據(jù)的解封裝。這里提到的數(shù)據(jù)封裝,特指在應(yīng)用層中包含的協(xié)議層的數(shù)據(jù)封裝,而不涉及傳輸層TCP/UDP、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層和物理層的數(shù)據(jù)封裝。上述提到的不同播放終端支持的數(shù)據(jù)封裝,其應(yīng)用層包含一個或多個協(xié)議。同時這些協(xié)議中所描述的數(shù)據(jù)封裝方法,通常僅是規(guī)定了數(shù)據(jù)封裝中控制信息的格式,但對具體如何拆分視頻、音頻信息,特別是不同幀的信息如何組織,并未具體規(guī)定。
[0003]發(fā)明人發(fā)現(xiàn),為提高傳輸效率,可以針對不同場景給出不同的封裝優(yōu)化方案,但是場景是易變的,目前還沒有封裝方案可以適應(yīng)所有的場景及所有的播放終端。無法針對不同的客戶端進行數(shù)據(jù)封裝。同時場景還可能會在傳輸過程中實時變化,即時開始預(yù)設(shè)正確了場景,也無法保證整個過程保持正確。因此目前常見的封裝方案為追求對客戶端的廣泛適用,對不同客戶端采用了同樣的封裝方案。這樣,客戶端無法根據(jù)自身的解封裝能力進行數(shù)據(jù)的解封裝導(dǎo)致增加客戶端解封轉(zhuǎn)的開銷。
[0004]針對現(xiàn)有技術(shù)中無法針對不同的客戶端進行數(shù)據(jù)封裝的問題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的主要目的在于提供一種面向多屏的場景自適應(yīng)的數(shù)據(jù)封裝方法和裝置及系統(tǒng),以解決無法針對不同的客戶端進行數(shù)據(jù)封裝的問題。
[0006]為了實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了一種面向多屏的場景自適應(yīng)的數(shù)據(jù)封裝方法。根據(jù)本發(fā)明的數(shù)據(jù)封裝方法包括:檢測客戶端的屬性信息,所述屬性信息用于反映所述客戶端對多媒體數(shù)據(jù)封裝的解析能力,所述多媒體數(shù)據(jù)包括音頻數(shù)據(jù)和/或視頻數(shù)據(jù);由所述屬性信息確定所述客戶端對應(yīng)的封裝參數(shù),所述封裝參數(shù)包括以下至少之一:第一參數(shù)、第二參數(shù)、第三參數(shù)、第四參數(shù)、第五參數(shù)、第六參數(shù),其中,所述第一參數(shù)用于反映所述客戶端是否支持音視頻交織,所述第二參數(shù)用于反映所述客戶端是否支持動態(tài)碼率,所述第三參數(shù)用于反映所述客戶端是否支持音頻數(shù)據(jù)截斷,所述第四參數(shù)用于反映所述客戶端是否支持視頻數(shù)據(jù)截斷,所述第五參數(shù)用于反映所述客戶端是否支持音頻幀聚合,所述第六參數(shù)用于反映所述客戶端是否支持視頻幀聚合;根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝;以及將封裝后的數(shù)據(jù)輸出至所述客戶端。
[0007]進一步地,在根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝之前,所述數(shù)據(jù)封裝方法還包括:獲取對所述多媒體數(shù)據(jù)進行編碼后的數(shù)據(jù);通過預(yù)先建立的緩存隊列對所述編碼后的數(shù)據(jù)進行緩存,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括:根據(jù)所述封裝參數(shù)對所述緩存隊列中緩存的數(shù)據(jù)進行封裝。
[0008]進一步地,所述緩存隊列包括音頻緩存隊列和視頻緩存隊列,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括:由所述第一參數(shù)判斷所述客戶端是否支持音視頻交織;如果判斷出所述客戶端不支持音視頻交織,則將所述音頻數(shù)據(jù)緩存至所述音頻緩存隊列,將所述視頻數(shù)據(jù)緩存至所述視頻緩存隊列;比較所述音頻緩存隊列的隊列頭部的數(shù)據(jù)幀的時間戳與所述視頻緩存隊列的隊列頭部的數(shù)據(jù)幀的時間戳;以及獲取所述音頻緩存隊列和所述視頻緩存隊列中時間戳較小的數(shù)據(jù)幀進行封裝。
[0009]進一步地,所述屬性信息包括所述客戶端的操作系統(tǒng)和所述操作系統(tǒng)對應(yīng)的版本號,檢測客戶端的屬性信息包括:檢測所述客戶端的操作系統(tǒng)和所述操作系統(tǒng)對應(yīng)的版本號,由所述屬性信息確定所述客戶端對應(yīng)的封裝參數(shù)包括:如果檢測出所述操作系統(tǒng)為1S系統(tǒng)且所述1S系統(tǒng)的版本號為i0S3.0及i0S3.0以上版本,則確定所述客戶端不支持音視頻交織、支持動態(tài)碼率、支持音頻數(shù)據(jù)截斷、支持視頻數(shù)據(jù)截斷、支持音頻幀聚合以及支持視頻幀聚合;如果檢測出所述操作系統(tǒng)為Android系統(tǒng)且所述Android系統(tǒng)的版本號為Android4.0及Android4.0以上版本,則確定所述客戶端不支持音視頻交織、支持動態(tài)碼率、支持音頻數(shù)據(jù)截斷、支持視頻數(shù)據(jù)截斷、支持音頻幀聚合以及支持視頻幀聚合;以及如果檢測出所述操作系統(tǒng)為Android系統(tǒng)且所述Android系統(tǒng)的版本號低于Android4.0,則確定所述客戶端支持音視頻交織、不支持動態(tài)碼率、不支持音頻數(shù)據(jù)截斷、不支持視頻數(shù)據(jù)截斷、不支持音頻幀聚合以及不支持視頻幀聚合。
[0010]進一步地,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括:由所述第五參數(shù)判斷所述客戶端是否支持音頻幀聚合;如果判斷出所述客戶端支持音頻幀聚合,則獲取所述音頻數(shù)據(jù)中按順序排列的多個音頻幀;獲取所述多個音頻幀中第一個音頻幀的數(shù)據(jù)包頭信息;以所述第一個音頻幀的數(shù)據(jù)包頭信息作為音頻幀集合的數(shù)據(jù)包頭信息對所述多個音頻幀進行聚合,得到所述音頻幀集合;以及對所述音頻幀集合進行封裝,和/或,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括:由所述第六參數(shù)判斷所述客戶端是否支持視頻幀聚合;如果判斷出所述客戶端支持視頻幀聚合,則獲取所述視頻數(shù)據(jù)中按順序排列的多個視頻幀;獲取所述多個視頻幀中第一個視頻幀的數(shù)據(jù)包頭信息;以所述第一個視頻幀的數(shù)據(jù)包頭信息作為視頻幀集合的數(shù)據(jù)包頭信息對所述多個視頻幀進行聚合,得到所述視頻幀集合;以及對所述視頻幀集合進行封裝。
[0011]進一步地,對所述多個音頻幀進行聚合,得到音頻幀集合包括:判斷所述客戶端接收的封裝后的數(shù)據(jù)包的數(shù)據(jù)長度是否為固定數(shù)據(jù)長度;如果判斷出所述客戶端接收的封裝后的數(shù)據(jù)包的數(shù)據(jù)長度為所述固定數(shù)據(jù)長度,則確定所述客戶端接收的封裝后的數(shù)據(jù)包的固定負(fù)荷和所述數(shù)據(jù)包的封包包頭數(shù)據(jù)長度;確定用于進行聚合的音頻幀的個數(shù)k,所述個數(shù)k滿足以下公式
_S(k)_>z
_2] Truncate ( (S (k) +L-l) /L)*L >
[0013]其中,z為預(yù)設(shè)的比例值,Truncate (S(k)+SH+L-1)/L)表示(S (k)+SH+L-1)/L 的整數(shù)部分的數(shù)值,S (k)表示所述固定數(shù)據(jù)長度,L表示所述固定負(fù)荷,SH表示所述封包包頭數(shù)據(jù)長度;以及選取k個音頻幀進行音頻幀聚合,得到所述音頻幀集合。
[0014]進一步地,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括:由所述第三參數(shù)判斷所述客戶端是否支持音頻數(shù)據(jù)截斷;如果判斷出所述客戶端支持音頻數(shù)據(jù)截斷,則確定所述音頻幀集合的數(shù)據(jù)截斷位置;基于所述音頻幀集合的數(shù)據(jù)截止位置將所述音頻幀集合截斷成第一數(shù)據(jù)塊和第二數(shù)據(jù)塊;以所述第一數(shù)據(jù)塊中第一個字節(jié)所屬的音頻幀的包頭信息作為所述第一數(shù)據(jù)塊的包頭信息對所述第一數(shù)據(jù)塊進行封裝;以及以所述第二數(shù)據(jù)塊中第一個字節(jié)所屬的音頻幀的包頭信息作為所述第二數(shù)據(jù)塊的包頭信息對所述第二數(shù)據(jù)塊進行封裝,和/或,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括:由所述第四參數(shù)判斷所述客戶端是否支持視頻數(shù)據(jù)截斷;如果判斷出所述客戶端支持視頻數(shù)據(jù)截斷,則確定所述視頻幀集合的數(shù)據(jù)截斷位置;基于所述視頻幀集合的數(shù)據(jù)截止位置將所述視頻幀集合截斷成第三數(shù)據(jù)塊和第四數(shù)據(jù)塊;以所述第三數(shù)據(jù)塊中第一個字節(jié)所屬的視頻幀的包頭信息作為所述第三數(shù)據(jù)塊的包頭信息對所述第三數(shù)據(jù)塊進行封裝;以及以所述第四數(shù)據(jù)塊中第一個字節(jié)所屬的視頻幀的包頭信息作為所述第四數(shù)據(jù)塊的包頭信息對所述第四數(shù)據(jù)塊進行封裝。
[0015]進一步地,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括:由所述第三參數(shù)判斷所述客戶端是否支持音頻數(shù)據(jù)截斷;如果判斷出所述客戶端支持音頻數(shù)據(jù)截斷,則確定所述音頻數(shù)據(jù)中音頻幀的數(shù)據(jù)截斷位置;基于所述音頻幀的數(shù)據(jù)截止位置將所述音頻幀截斷成第五數(shù)據(jù)塊和第六數(shù)據(jù)塊;以所述音頻幀的包頭信息作為所述第五數(shù)據(jù)塊的包頭信息對所述第五數(shù)據(jù)塊進行封裝;以及以所述音頻幀的包頭信息作為所述第六數(shù)據(jù)塊的包頭信息對所述第六數(shù)據(jù)塊進行封裝,和/或,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括:由所述第四參數(shù)判斷所述客戶端是否支持視頻數(shù)據(jù)截斷;如果判斷出所述客戶端支持視頻數(shù)據(jù)截斷,則確定所述視頻數(shù)據(jù)中視頻幀的數(shù)據(jù)截斷位置;基于所述視頻幀的數(shù)據(jù)截止位置將所述視頻幀截斷成第七數(shù)據(jù)塊和第八數(shù)據(jù)塊;以所述視頻幀的包頭信息作為所述第七數(shù)據(jù)塊的包頭信息對所述第七數(shù)據(jù)塊進行封裝;以及以所述視頻幀的包頭信息作為所述第八數(shù)據(jù)塊的包頭信息對所述第八數(shù)據(jù)塊進行封裝。
[0016]為了實現(xiàn)上述目的,根據(jù)本發(fā)明的另一方面,提供了一種面向多屏的場景自適應(yīng)的數(shù)據(jù)封裝裝置。根據(jù)本發(fā)明的數(shù)據(jù)封裝裝置包括:檢測單元,用于檢測客戶端的屬性信息,所述屬性信息用于反映所述客戶端對多媒體數(shù)據(jù)封裝的解析能力,所述多媒體數(shù)據(jù)包括音頻數(shù)據(jù)和/或視頻數(shù)據(jù);確定單元,用于由所述屬性信息確定所述客戶端對應(yīng)的封裝參數(shù),所述封裝參數(shù)包括以下至少之一:第一參數(shù)、第二參數(shù)、第三參數(shù)、第四參數(shù)、第五參數(shù)、第六參數(shù),其中,所述第一參數(shù)用于反映所述客戶端是否支持音視頻交織,所述第二參數(shù)用于反映所述客戶端是否支持動態(tài)碼率,所述第三參數(shù)用于反映所述客戶端是否支持音頻數(shù)據(jù)截斷,所述第四參數(shù)用于反映所述客戶端是否支持視頻數(shù)據(jù)截斷,所述第五參數(shù)用于反映所述客戶端是否支持音頻幀聚合,所述第六參數(shù)用于反映所述客戶端是否支持視頻幀聚合;封裝單元,用于根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝;以及輸出單元,用于將封裝后的數(shù)據(jù)輸出至所述客戶端。
[0017]進一步地,所述數(shù)據(jù)封裝裝置還包括:獲取單元,用于在根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝之前,獲取對所述多媒體數(shù)據(jù)進行編碼后的數(shù)據(jù);緩存單元,用于通過預(yù)先建立的緩存隊列對所述編碼后的數(shù)據(jù)進行緩存,所述封裝單元還用于根據(jù)所述封裝參數(shù)對所述緩存隊列中緩存的數(shù)據(jù)進行封裝。
[0018]進一步地,所述緩存隊列包括音頻緩存隊列和視頻緩存隊列,所述封裝單元包括:第一判斷模塊,用于由所述第一參數(shù)判斷所述客戶端是否支持音視頻交織;緩存模塊,用于當(dāng)判斷出所述客戶端不支持音視頻交織時,將所述音頻數(shù)據(jù)緩存至所述音頻緩存隊列,將所述視頻數(shù)據(jù)緩存至所述視頻緩存隊列;比較模塊,用于比較所述音頻緩存隊列的隊列頭部的數(shù)據(jù)幀的時間戳與所述視頻緩存隊列的隊列頭部的數(shù)據(jù)幀的時間戳;以及第一封裝模塊,用于獲取所述音頻緩存隊列和所述視頻緩存隊列中時間戳較小的數(shù)據(jù)幀進行封裝。
[0019]進一步地,所述屬性信息包括所述客戶端的操作系統(tǒng)和所述操作系統(tǒng)對應(yīng)的版本號,所述檢測單元包括:檢測模塊,用于檢測所述客戶端的操作系統(tǒng)和所述操作系統(tǒng)對應(yīng)的版本號,所述確定單元包括:第一確定模塊,用于當(dāng)檢測出所述操作系統(tǒng)為1S系統(tǒng)且所述1S系統(tǒng)的版本號為i0S3.0及i0S3.0以上版本時,確定所述客戶端不支持音視頻交織、支持動態(tài)碼率、支持音頻數(shù)據(jù)截斷、支持視頻數(shù)據(jù)截斷、支持音頻幀聚合以及支持視頻幀聚合;第二確定模塊,用于當(dāng)檢測出所述操作系統(tǒng)為Android系統(tǒng)且所述Android系統(tǒng)的版本號為Android4.0及Android4.0以上版本時,確定所述客戶端不支持音視頻交織、支持動態(tài)碼率、支持音頻數(shù)據(jù)截斷、支持視頻數(shù)據(jù)截斷、支持音頻幀聚合以及支持視頻幀聚合;以及第三確定模塊,用于當(dāng)檢測出所述操作系統(tǒng)為Android系統(tǒng)且所述Android系統(tǒng)的版本號低于Android4.0時,確定所述客戶端支持音視頻交織、不支持動態(tài)碼率、不支持音頻數(shù)據(jù)截斷、不支持視頻數(shù)據(jù)截斷、不支持音頻幀聚合以及不支持視頻幀聚合。
[0020]進一步地,所述封裝單元包括:第二判斷模塊,用于由所述第五參數(shù)判斷所述客戶端是否支持音頻幀聚合;第一獲取模塊,用于當(dāng)判斷出所述客戶端支持音頻幀聚合時,獲取所述音頻數(shù)據(jù)中按順序排列的多個音頻幀;第二獲取模塊,用于獲取所述多個音頻幀中第一個音頻幀的數(shù)據(jù)包頭信息;第一聚合模塊,用于以所述第一個音頻幀的數(shù)據(jù)包頭信息作為音頻幀集合的數(shù)據(jù)包頭信息對所述多個音頻幀進行聚合,得到音頻幀集合;以及第二封裝模塊,用于對所述音頻幀集合進行封裝,和/或,所述封裝單元包括:第三判斷模塊,用于由所述第六參數(shù)判斷所述客戶端是否支持視頻幀聚合;第三獲取模塊,用于當(dāng)判斷出所述客戶端支持視頻幀聚合時,獲取所述視頻數(shù)據(jù)中按順序排列的多個視頻幀;第四獲取模塊,用于獲取所述多個視頻幀中第一個視頻幀的數(shù)據(jù)包頭信息;第二聚合模塊,用于以所述第一個視頻幀的數(shù)據(jù)包頭信息作為視頻幀集合的數(shù)據(jù)包頭信息對所述多個視頻幀進行聚合,得到所述視頻幀集合;以及第三封裝模塊,用于對所述視頻幀集合進行封裝。
[0021]進一步地,所述第一聚合模塊包括:判斷子模塊,用于判斷所述客戶端接收的封裝后的數(shù)據(jù)包的數(shù)據(jù)長度是否為固定數(shù)據(jù)長度;第一確定子模塊,用于當(dāng)判斷出所述客戶端接收的封裝后的數(shù)據(jù)包的數(shù)據(jù)長度為所述固定數(shù)據(jù)長度時,確定所述客戶端接收的封裝后的數(shù)據(jù)包的固定負(fù)荷和所述數(shù)據(jù)包的封包包頭數(shù)據(jù)長度;第二確定子模塊,用于確定用于進行聚合的音頻幀的個數(shù)k,所述個數(shù)k滿足以下公式
【權(quán)利要求】
1.一種面向多屏的場景自適應(yīng)的數(shù)據(jù)封裝方法,其特征在于,包括: 檢測客戶端的屬性信息,所述屬性信息用于反映所述客戶端對多媒體數(shù)據(jù)封裝的解析能力,所述多媒體數(shù)據(jù)包括音頻數(shù)據(jù)和/或視頻數(shù)據(jù); 由所述屬性信息確定所述客戶端對應(yīng)的封裝參數(shù),所述封裝參數(shù)包括以下至少之一:第一參數(shù)、第二參數(shù)、第三參數(shù)、第四參數(shù)、第五參數(shù)、第六參數(shù),其中,所述第一參數(shù)用于反映所述客戶端是否支持音視頻交織,所述第二參數(shù)用于反映所述客戶端是否支持動態(tài)碼率,所述第三參數(shù)用于反映所述客戶端是否支持音頻數(shù)據(jù)截斷,所述第四參數(shù)用于反映所述客戶端是否支持視頻數(shù)據(jù)截斷,所述第五參數(shù)用于反映所述客戶端是否支持音頻幀聚合,所述第六參數(shù)用于反映所述客戶端是否支持視頻幀聚合; 根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝;以及 將封裝后的數(shù)據(jù)輸出至所述客戶端。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)封裝方法,其特征在于, 在根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝之前,所述數(shù)據(jù)封裝方法還包括:獲取對所述多媒體數(shù)據(jù)進行編碼后的數(shù)據(jù);通過預(yù)先建立的緩存隊列對所述編碼后的數(shù)據(jù)進行緩存, 根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括:根據(jù)所述封裝參數(shù)對所述緩存隊列中緩存的數(shù)據(jù)進行封裝。
3.根據(jù)權(quán)利要求2所述的數(shù)據(jù)封裝方法,其特征在于,所述緩存隊列包括音頻緩存隊列和視頻緩存隊列,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括: 由所述第一參數(shù)判斷所述客戶端是否支持音視頻交織; 如果判斷出所述客戶端不支持音視頻交織,則將所述音頻數(shù)據(jù)緩存至所述音頻緩存隊列,將所述視頻數(shù)據(jù)緩存至所述視頻緩存隊列; 比較所述音頻緩存隊列的隊列頭部的數(shù)據(jù)幀的時間戳與所述視頻緩存隊列的隊列頭部的數(shù)據(jù)幀的時間戳;以及 獲取所述音頻緩存隊列和所述視頻緩存隊列中時間戳較小的數(shù)據(jù)幀進行封裝。
4.根據(jù)權(quán)利要求1所述的數(shù)據(jù)封裝方法,其特征在于,所述屬性信息包括所述客戶端的操作系統(tǒng)和所述操作系統(tǒng)對應(yīng)的版本號,檢測客戶端的屬性信息包括:檢測所述客戶端的操作系統(tǒng)和所述操作系統(tǒng)對應(yīng)的版本號,由所述屬性信息確定所述客戶端對應(yīng)的封裝參數(shù)包括: 如果檢測出所述操作系統(tǒng)為1S系統(tǒng)且所述1S系統(tǒng)的版本號為1S3.0及1S3.0以上版本,則確定所述客戶端不支持音視頻交織、支持動態(tài)碼率、支持音頻數(shù)據(jù)截斷、支持視頻數(shù)據(jù)截斷、支持音頻幀聚合以及支持視頻幀聚合; 如果檢測出所述操作系統(tǒng)為Android系統(tǒng)且所述Android系統(tǒng)的版本號為Android4.0及Android4.0以上版本,則確定所述客戶端不支持音視頻交織、支持動態(tài)碼率、支持音頻數(shù)據(jù)截斷、支持視頻數(shù)據(jù)截斷、支持音頻幀聚合以及支持視頻幀聚合;以及 如果檢測出所述操作系統(tǒng)為Android系統(tǒng)且所述Android系統(tǒng)的版本號低于Android4.0,則確定所述客戶端支持音視頻交織、不支持動態(tài)碼率、不支持音頻數(shù)據(jù)截斷、不支持視頻數(shù)據(jù)截斷、不支持音頻幀聚合以及不支持視頻幀聚合。
5.根據(jù)權(quán)利要求1所述的數(shù)據(jù)封裝方法,其特征在于,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括: 由所述第五參數(shù)判斷所述客戶端是否支持音頻幀聚合; 如果判斷出所述客戶端支持音頻幀聚合,則獲取所述音頻數(shù)據(jù)中按順序排列的多個音頻幀; 獲取所述多個音頻幀中第一個音頻幀的數(shù)據(jù)包頭信息; 以所述第一個音頻幀的數(shù)據(jù)包頭信息作為音頻幀集合的數(shù)據(jù)包頭信息對所述多個音頻幀進行聚合,得到所述音頻幀集合;以及對所述音頻幀集合進行封裝, 和/或,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括: 由所述第六參數(shù)判斷所述客戶端是否支持視頻幀聚合; 如果判斷出所述客戶端支持視頻幀聚合,則獲取所述視頻數(shù)據(jù)中按順序排列的多個視頻幀; 獲取所述多個視頻幀中第一個視頻幀的數(shù)據(jù)包頭信息; 以所述第一個視頻幀的數(shù)據(jù)包頭信息作為視頻幀集合的數(shù)據(jù)包頭信息對所述多個視頻幀進行聚合,得到所述視頻幀集合;以及對所述視頻幀集合進行封裝。
6.根據(jù)權(quán)利要求5所述的數(shù)據(jù)封裝方法,其特征在于,對所述多個音頻幀進行聚合,得到音頻幀集合包括: 判斷所述客戶端接收的封裝后的數(shù)據(jù)包的數(shù)據(jù)長度是否為固定數(shù)據(jù)長度; 如果判斷出所述客戶端接收的封裝后的數(shù)據(jù)包的數(shù)據(jù)長度為所述固定數(shù)據(jù)長度,則確定所述客戶端接收的封裝后的數(shù)據(jù)包的固定負(fù)荷和所述數(shù)據(jù)包的封包包頭數(shù)據(jù)長度;確定用于進行聚合的音頻幀的個數(shù)k,所述個數(shù)k滿足以下公式
其中,z為預(yù)設(shè)的比例值,Truncate (S (k) +SH+L-1) /L)表示(S (k) +SH+L-1) /L的整數(shù)部分的數(shù)值,S (k)表示所述固定數(shù)據(jù)長度,L表示所述固定負(fù)荷,SH表示所述封包包頭數(shù)據(jù)長度;以及 選取k個音頻幀進行音頻幀聚合,得到所述音頻幀集合。
7.根據(jù)權(quán)利要求5所述的數(shù)據(jù)封裝方法,其特征在于,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括: 由所述第三參數(shù)判斷所述客戶端是否支持音頻數(shù)據(jù)截斷; 如果判斷出所述客戶端支持音頻數(shù)據(jù)截斷,則確定所述音頻幀集合的數(shù)據(jù)截斷位置;基于所述音頻幀集合的數(shù)據(jù)截止位置將所述音頻幀集合截斷成第一數(shù)據(jù)塊和第二數(shù)據(jù)塊; 以所述第一數(shù)據(jù)塊中第一個字節(jié)所屬的音頻幀的包頭信息作為所述第一數(shù)據(jù)塊的包頭信息對所述第一數(shù)據(jù)塊進行封裝;以及 以所述第二數(shù)據(jù)塊中第一個字節(jié)所屬的音頻幀的包頭信息作為所述第二數(shù)據(jù)塊的包頭信息對所述第二數(shù)據(jù)塊進行封裝, 和/或,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括:由所述第四參數(shù)判斷所述客戶端是否支持視頻數(shù)據(jù)截斷; 如果判斷出所述客戶端支持視頻數(shù)據(jù)截斷,則確定所述視頻幀集合的數(shù)據(jù)截斷位置;基于所述視頻幀集合的數(shù)據(jù)截止位置將所述視頻幀集合截斷成第三數(shù)據(jù)塊和第四數(shù)據(jù)塊; 以所述第三數(shù)據(jù)塊中第一個字節(jié)所屬的視頻幀的包頭信息作為所述第三數(shù)據(jù)塊的包頭信息對所述第三數(shù)據(jù)塊進行封裝;以及 以所述第四數(shù)據(jù)塊中第一個字節(jié)所屬的視頻幀的包頭信息作為所述第四數(shù)據(jù)塊的包頭信息對所述第四數(shù)據(jù)塊進行封裝。
8.根據(jù)權(quán)利要求1所述的數(shù)據(jù)封裝方法,其特征在于,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括: 由所述第三參數(shù)判斷所述客戶端是否支持音頻數(shù)據(jù)截斷; 如果判斷出所述客戶端支持音頻數(shù)據(jù)截斷,則確定所述音頻數(shù)據(jù)中音頻幀的數(shù)據(jù)截斷位置; 基于所述音頻幀 的數(shù)據(jù)截止位置將所述音頻幀截斷成第五數(shù)據(jù)塊和第六數(shù)據(jù)塊;以所述音頻幀的包頭信息作為所述第五數(shù)據(jù)塊的包頭信息對所述第五數(shù)據(jù)塊進行封裝;以及 以所述音頻幀的包頭信息作為所述第六數(shù)據(jù)塊的包頭信息對所述第六數(shù)據(jù)塊進行封裝, 和/或,根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝包括: 由所述第四參數(shù)判斷所述客戶端是否支持視頻數(shù)據(jù)截斷; 如果判斷出所述客戶端支持視頻數(shù)據(jù)截斷,則確定所述視頻數(shù)據(jù)中視頻幀的數(shù)據(jù)截斷位置; 基于所述視頻幀的數(shù)據(jù)截止位置將所述視頻幀截斷成第七數(shù)據(jù)塊和第八數(shù)據(jù)塊;以所述視頻幀的包頭信息作為所述第七數(shù)據(jù)塊的包頭信息對所述第七數(shù)據(jù)塊進行封裝;以及 以所述視頻幀的包頭信息作為所述第八數(shù)據(jù)塊的包頭信息對所述第八數(shù)據(jù)塊進行封裝。
9.一種面向多屏的場景自適應(yīng)的數(shù)據(jù)封裝裝置,其特征在于,包括: 檢測單元,用于檢測客戶端的屬性信息,所述屬性信息用于反映所述客戶端對多媒體數(shù)據(jù)封裝的解析能力,所述多媒體數(shù)據(jù)包括音頻數(shù)據(jù)和/或視頻數(shù)據(jù); 確定單元,用于由所述屬性信息確定所述客戶端對應(yīng)的封裝參數(shù),所述封裝參數(shù)包括以下至少之一:第一參數(shù)、第二參數(shù)、第三參數(shù)、第四參數(shù)、第五參數(shù)、第六參數(shù),其中,所述第一參數(shù)用于反映所述客戶端是否支持音視頻交織,所述第二參數(shù)用于反映所述客戶端是否支持動態(tài)碼率,所述第三參數(shù)用于反映所述客戶端是否支持音頻數(shù)據(jù)截斷,所述第四參數(shù)用于反映所述客戶端是否支持視頻數(shù)據(jù)截斷,所述第五參數(shù)用于反映所述客戶端是否支持音頻幀聚合,所述第六參數(shù)用于反映所述客戶端是否支持視頻幀聚合; 封裝單元,用于根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝;以及 輸出單元,用于將封裝后的數(shù)據(jù)輸出至所述客戶端。
10.一種面向多屏的場景自適應(yīng)的數(shù)據(jù)封裝系統(tǒng),其特征在于,包括:服務(wù)器和客戶端,其中, 服務(wù)器用于檢測客戶端的屬性信息,所述屬性信息用于反映所述客戶端對多媒體數(shù)據(jù)封裝的解析能力,所述多媒體數(shù)據(jù)包括音頻數(shù)據(jù)和/或視頻數(shù)據(jù),由所述屬性信息確定所述客戶端對應(yīng)的封裝參數(shù),根據(jù)所述封裝參數(shù)對所述多媒體數(shù)據(jù)進行封裝,將封裝后的數(shù)據(jù)輸 出至所述客戶端,其中,所述封裝參數(shù)包括以下至少之一:第一參數(shù)、第二參數(shù)、第三參數(shù)、第四參數(shù)、第五參數(shù)、第六參數(shù),其中,所述第一參數(shù)用于反映所述客戶端是否支持音視頻交織,所述第二參數(shù)用于反映所述客戶端是否支持動態(tài)碼率,所述第三參數(shù)用于反映所述客戶端是否支持音頻數(shù)據(jù)截斷,所述第四參數(shù)用于反映所述客戶端是否支持視頻數(shù)據(jù)截斷,所述第五參數(shù)用于反映所述客戶端是否支持音頻幀聚合,所述第六參數(shù)用于反映所述客戶端是否支持視頻幀聚合。
【文檔編號】H04N21/231GK104079949SQ201410302179
【公開日】2014年10月1日 申請日期:2014年6月26日 優(yōu)先權(quán)日:2014年6月26日
【發(fā)明者】羅翰, 李毅, 要文濤 申請人:北京世紀(jì)鼎點軟件有限公司