本發(fā)明涉及p2p流媒,具體涉及一種支持直播點(diǎn)播以及多種流媒體傳輸協(xié)議的p2p流媒體系統(tǒng)。
背景技術(shù):
1、隨著多媒體行業(yè)的快速發(fā)展,直播和點(diǎn)播等業(yè)務(wù)場景逐漸增多,音視頻網(wǎng)絡(luò)數(shù)據(jù)量不斷增加。對于流媒體提供商和運(yùn)營商來說,降低網(wǎng)絡(luò)帶寬費(fèi)用和提升服務(wù)質(zhì)量成為亟待解決的問題。現(xiàn)有的直播,點(diǎn)播服務(wù)都會采用p2p技術(shù)來降低帶寬費(fèi)用和提升速度(網(wǎng)絡(luò)加速),通過播放器碼率自適應(yīng)來提升播放質(zhì)量,目前p2p流媒體系統(tǒng)核心點(diǎn)包括:1.sourceservice提供點(diǎn)播文件唯一的音視頻切片;2.vod?service提供詳細(xì)點(diǎn)播切片信息;3.liveservice提供直播流4.tracker?service提供穿透打洞服務(wù);4.p2p-sdk完成音視頻數(shù)據(jù)的獲取,分享以及生成本地加速地址對接播放器。
2、現(xiàn)有的p2p流媒體系統(tǒng)雖然在一定程度上通過p2p技術(shù)降低了帶寬費(fèi)用并提升了速度,但仍存在諸多不足:
3、1、現(xiàn)有p2p流媒體系統(tǒng)對于直播和點(diǎn)播節(jié)目都是單一支持,沒有做到系統(tǒng)統(tǒng)一支持,p2p-sdk統(tǒng)一適配;
4、2、tracker?service大多都是集成了ice,stun服務(wù),增加了sdk對接的成本
5、3、p2p-sdk需要同時(shí)支持直播和點(diǎn)播節(jié)目,對于hls和dash協(xié)議需要完成碼率自適應(yīng)效果,本地加速地址需要支持多種協(xié)議。
技術(shù)實(shí)現(xiàn)思路
1、為了解決現(xiàn)有技術(shù)中存在的問題,本發(fā)明的目的在于提供一種更加高效、靈活、成本更低的支持直播點(diǎn)播以及多種流媒體傳輸協(xié)議的p2p流媒體系統(tǒng),該系統(tǒng)通過統(tǒng)一的系統(tǒng)架構(gòu)和高效的切片與拉流機(jī)制,旨在降低帶寬費(fèi)用、提升服務(wù)質(zhì)量、降低sdk對接成本,并實(shí)現(xiàn)多平臺集成和自適應(yīng)播放解決方案。
2、本發(fā)明通過以下技術(shù)方案來實(shí)現(xiàn)上述目的:
3、一種支持直播點(diǎn)播以及多種流媒體傳輸協(xié)議的p2p流媒體系統(tǒng),包括:
4、內(nèi)容管理系統(tǒng)cms,用于提供一個(gè)運(yùn)維配置節(jié)目的界面,允許進(jìn)行直播和點(diǎn)播節(jié)目的上線下線操作,在配置成功后更新節(jié)目信息,客戶端通過請求列表服務(wù)獲取到最新配置且支持觀看的節(jié)目;
5、內(nèi)容存儲服務(wù)器source?server,用于存儲所有點(diǎn)播音視頻資源文件;
6、節(jié)目點(diǎn)播服務(wù)器vod?service,與所述內(nèi)容存儲服務(wù)器source?server和內(nèi)容管理系統(tǒng)cms連接,用于存儲節(jié)目點(diǎn)播文件的詳細(xì)列表信息,包括影片名稱、影片類型、影片切片信息;
7、節(jié)目直播服務(wù)器live?service,用于接收內(nèi)容管理系統(tǒng)cms下發(fā)的直播節(jié)目源,并從直播節(jié)目源獲取節(jié)目音視頻切片信息,同時(shí)不斷更新存儲最新的切片信息;
8、tracker服務(wù)器,用于提供客戶端之間的穿透打洞服務(wù)和nat類型檢測;
9、多個(gè)p2p客戶端,每個(gè)p2p客戶端均集成有p2p-sdk,所述p2p客戶端通過所述節(jié)目點(diǎn)播服務(wù)器vod?service、節(jié)目直播服務(wù)器live?service通信,以獲取點(diǎn)播和直播節(jié)目的播放地址;所述p2p客戶端支持將多個(gè)文件作為數(shù)據(jù)源,通過p2p-sdk進(jìn)行封裝和推流,以便將文件內(nèi)容分發(fā)給其他p2p客戶端;所述p2p客戶端能夠同時(shí)處理多個(gè)分塊內(nèi)容,通過p2p-sdk實(shí)現(xiàn)合并與分發(fā);
10、列表服務(wù)器,用于生成客戶端可訪問的節(jié)目鏈接,包括內(nèi)容分發(fā)網(wǎng)絡(luò)入口地址、影片類型、p2p分享標(biāo)志以及tracker?service的地址信息。
11、根據(jù)本發(fā)明提供的一種支持直播點(diǎn)播以及多種流媒體傳輸協(xié)議的p2p流媒體系統(tǒng),所述節(jié)目點(diǎn)播服務(wù)器包括:
12、接收模塊,用于接收內(nèi)容管理系統(tǒng)cms下發(fā)的點(diǎn)播節(jié)目信息;
13、處理模塊,用于處理接收到的點(diǎn)播節(jié)目信息,獲取節(jié)目詳細(xì)信息,并存儲至數(shù)據(jù)庫;
14、信息生成模塊,用于根據(jù)存儲的節(jié)目詳細(xì)信息生成客戶端可訪問的節(jié)目鏈接。
15、根據(jù)本發(fā)明提供的一種支持直播點(diǎn)播以及多種流媒體傳輸協(xié)議的p2p流媒體系統(tǒng),所述p2p-sdk支持基于http協(xié)議的點(diǎn)播視頻切片,包括:
16、根據(jù)預(yù)設(shè)的塊大小,計(jì)算將待傳輸?shù)奈募謮K范圍;
17、為每個(gè)數(shù)據(jù)塊分配唯一的id,并記錄每個(gè)塊的起始字節(jié)和結(jié)束字節(jié),確定range范圍;
18、將每個(gè)數(shù)據(jù)塊的id、起始字節(jié)和結(jié)束字節(jié)信息記錄在一個(gè)或多個(gè)索引文件中,以便在傳輸和接收過程中快速定位和重組數(shù)據(jù)塊;
19、使用http協(xié)議中的range頭部字段,在客戶端請求時(shí)指定所需數(shù)據(jù)塊的range范圍,從而實(shí)現(xiàn)按需下載和播放視頻;
20、在傳輸過程中,若某個(gè)數(shù)據(jù)塊傳輸失敗,客戶端可根據(jù)索引文件中的信息重新請求該數(shù)據(jù)塊,實(shí)現(xiàn)斷點(diǎn)續(xù)傳和錯(cuò)誤恢復(fù)。
21、根據(jù)本發(fā)明提供的一種支持直播點(diǎn)播以及多種流媒體傳輸協(xié)議的p2p流媒體系統(tǒng),當(dāng)不同平臺的p2p客戶端對接p2p-sdk時(shí),通過tracker服務(wù)器實(shí)現(xiàn)p2p客戶端之間的穿透,包括:
22、客戶端a建立socket并通過udp協(xié)議向tracker?service發(fā)起穿透請求;
23、tracker?service接收所述穿透請求后,通過tcp協(xié)議將所述請求轉(zhuǎn)發(fā)給客戶端b;
24、客戶端b接收到tracker?service轉(zhuǎn)發(fā)的穿透請求后,建立socket并通過udp協(xié)議向tracker?service發(fā)起確認(rèn)穿透的請求;
25、tracker?service接收客戶端b的確認(rèn)穿透請求后,通過tcp協(xié)議將所述確認(rèn)請求轉(zhuǎn)發(fā)給客戶端a;
26、客戶端a和客戶端b在接收到對方的確認(rèn)信息后,分別開啟穿透線程,相互發(fā)送測試信息;
27、客戶端a和客戶端b在確認(rèn)能夠正確接收對方發(fā)送的測試信息后,穿透成功,脫離tracker服務(wù)器進(jìn)行直接通信。
28、根據(jù)本發(fā)明提供的一種支持直播點(diǎn)播以及多種流媒體傳輸協(xié)議的p2p流媒體系統(tǒng),當(dāng)不同平臺的p2p客戶端對接p2p-sdk時(shí),從列表服務(wù)器獲取包含多個(gè)節(jié)目列表信息的節(jié)目列表,其中每個(gè)節(jié)目列表信息至少包括一個(gè)節(jié)目的播放地址;
29、播放器從節(jié)目列表中選擇一個(gè)節(jié)目,并訪問對應(yīng)的播放地址;
30、對播放地址進(jìn)行域名解析,以獲取一個(gè)或多個(gè)可用的pop點(diǎn)地址,其中pop點(diǎn)地址是指內(nèi)容分發(fā)網(wǎng)絡(luò)中的邊緣節(jié)點(diǎn)地址;
31、從解析得到的pop點(diǎn)地址中獲取所選節(jié)目的切片數(shù)據(jù);若在pop點(diǎn)上命中了所選節(jié)目的切片數(shù)據(jù),則直接將該切片數(shù)據(jù)傳送給播放器進(jìn)行播放;
32、若在pop點(diǎn)上未命中所選節(jié)目的切片數(shù)據(jù),則回源到節(jié)目直播服務(wù)器liveservice,從節(jié)目直播服務(wù)器live?service獲取切片數(shù)據(jù),并將獲取的切片數(shù)據(jù)傳送給播放器進(jìn)行播放。
33、根據(jù)本發(fā)明提供的一種支持直播點(diǎn)播以及多種流媒體傳輸協(xié)議的p2p流媒體系統(tǒng),所述p2p-sdk支持http流模式點(diǎn)播節(jié)目的拉流,包括:
34、向列表服務(wù)發(fā)起請求,以獲取包含節(jié)目鏈接、類型及是否支持p2p分享等信息的節(jié)目列表詳細(xì)信息;
35、根據(jù)節(jié)目列表中的信息,對于支持p2p分享的點(diǎn)播節(jié)目,向內(nèi)容分發(fā)網(wǎng)絡(luò)cf入口發(fā)起請求,獲取該節(jié)目的切片詳細(xì)信息;
36、根據(jù)獲取的切片詳細(xì)信息,按照切片id依次自增的順序,重新計(jì)算每個(gè)切片的range數(shù)據(jù)范圍;
37、根據(jù)計(jì)算出的range數(shù)據(jù)范圍,向內(nèi)容分發(fā)網(wǎng)絡(luò)的邊緣節(jié)點(diǎn)pop點(diǎn)發(fā)起get請求,以獲取對應(yīng)范圍內(nèi)的音視頻數(shù)據(jù);
38、在獲取音視頻數(shù)據(jù)的過程中,p2p-sdk根據(jù)節(jié)目的鏈接信息判斷是否需要開啟p2p服務(wù),對于支持p2p分享的節(jié)目,啟動p2p功能以實(shí)現(xiàn)數(shù)據(jù)的共享與加速。
39、根據(jù)本發(fā)明提供的一種支持直播點(diǎn)播以及多種流媒體傳輸協(xié)議的p2p流媒體系統(tǒng),在判斷是否需要開啟p2p服務(wù)時(shí),包括:
40、接收并解析節(jié)目鏈接,以識別節(jié)目是直播節(jié)目或點(diǎn)播節(jié)目,并確定是否支持p2p分享功能;其中,該節(jié)目鏈接包含節(jié)目的唯一標(biāo)識符和/或類型信息;
41、根據(jù)解析結(jié)果請求對應(yīng)的播放地址;接收并解析所述播放地址,根據(jù)url中的特定參數(shù)或格式,進(jìn)一步確認(rèn)是否需要開啟p2p服務(wù);
42、若確定需要開啟p2p服務(wù),則配置p2p-sdk以啟用p2p數(shù)據(jù)分享功能,否則,配置p2p-sdk以常規(guī)模式進(jìn)行數(shù)據(jù)傳輸。
43、根據(jù)本發(fā)明提供的一種支持直播點(diǎn)播以及多種流媒體傳輸協(xié)議的p2p流媒體系統(tǒng),range數(shù)據(jù)范圍的計(jì)算公式為:
44、id*size-(id+1)*size-1
45、其中,id為當(dāng)前切片的標(biāo)識符,size為每個(gè)切片的大小。
46、根據(jù)本發(fā)明提供的一種支持直播點(diǎn)播以及多種流媒體傳輸協(xié)議的p2p流媒體系統(tǒng),所述p2p-sdk提供點(diǎn)播回退和快進(jìn)的解決方案,具體包括:
47、對于http點(diǎn)播,當(dāng)用戶進(jìn)行回退或快進(jìn)操作時(shí),由播放器發(fā)起新的http請求,該http請求包含數(shù)據(jù)開始節(jié)點(diǎn)的信息,p2p-sdk在接收到http請求后通過二分查找算法在本地緩存列表中查找數(shù)據(jù)塊id,若本地緩存未命中則向服務(wù)器發(fā)起請求并將獲取的數(shù)據(jù)發(fā)給播放器;若本地緩存命中,則直接定位到具體的數(shù)據(jù)塊,并將其返回給播放器;
48、其中,無論是從本地緩存還是服務(wù)器獲取數(shù)據(jù),拉流端都會按照最新的id自增來繼續(xù)拉流。
49、根據(jù)本發(fā)明提供的一種支持直播點(diǎn)播以及多種流媒體傳輸協(xié)議的p2p流媒體系統(tǒng),所述p2p-sdk提供點(diǎn)播回退和快進(jìn)的解決方案,具體包括:
50、對于hls和dash點(diǎn)播,當(dāng)用戶進(jìn)行回退或快進(jìn)操作時(shí),由播放器發(fā)起新的切片請求,接收到播放器的請求后,p2p-sdk本地服務(wù)同樣通過二分查找算法處理,若本地緩存未命中則回復(fù)播放器302重定向響應(yīng),讓播放器回源至服務(wù)器獲取切片;若本地緩存命中,直接定位到具體的數(shù)據(jù)塊,并將其返回給播放器。
51、由此可見,相比于現(xiàn)有技術(shù),本發(fā)明提供的系統(tǒng)具有以下有益效果:
52、1、本發(fā)明提供整體p2p流媒體服務(wù)的搭建與實(shí)現(xiàn),包括直播、點(diǎn)播服務(wù)以及資源的切片劃分方案,能夠同時(shí)支持直播和點(diǎn)播服務(wù),而無需為兩種服務(wù)分別搭建和維護(hù)獨(dú)立的系統(tǒng),從而降低了系統(tǒng)復(fù)雜性和運(yùn)維成本。
53、2、本發(fā)明自建tracker服務(wù)器,去除ice、stun等服務(wù)的集成,降低了sdk對接成本。tracker服務(wù)器提供穿透打洞服務(wù)和nat類型檢測,有助于p2p客戶端之間建立直接連接,減少數(shù)據(jù)傳輸對服務(wù)器的依賴,提高數(shù)據(jù)傳輸效率和系統(tǒng)可擴(kuò)展性
54、3、本發(fā)明實(shí)現(xiàn)http點(diǎn)播節(jié)目的p2p-sdk?range請求切片方案,支持多種流媒體協(xié)議和多平臺集成。
55、4、本發(fā)明提供用戶回退、快進(jìn)等自適應(yīng)的解決方案,增強(qiáng)用戶觀看體驗(yàn)。同時(shí),內(nèi)容管理系統(tǒng)cms提供直觀的運(yùn)維配置界面,方便節(jié)目上線下線操作。
56、5、本發(fā)明系統(tǒng)采用模塊化設(shè)計(jì),各組件之間松耦合,便于系統(tǒng)的擴(kuò)展和升級。同時(shí),內(nèi)容管理系統(tǒng)cms和列表服務(wù)器的引入,使得節(jié)目信息的管理和分發(fā)更加高效和靈活。
57、6、p2p-sdk支持多平臺集成,使得系統(tǒng)能夠在不同的操作系統(tǒng)和設(shè)備上運(yùn)行,提高系統(tǒng)的普及率和市場份額。
58、下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明作進(jìn)一步詳細(xì)說明。