本發(fā)明涉及網(wǎng)絡(luò)視頻播放,特別涉及一種視頻直播回播系統(tǒng)以及視頻直播回播方法。
背景技術(shù):
:
傳統(tǒng)視頻播放系統(tǒng)架構(gòu)如圖2所示,發(fā)布端只完成視頻幀采集上傳的工作,其他的轉(zhuǎn)碼、錄制、分發(fā)的工作都由后端集群來完成,這樣的設(shè)計導(dǎo)致了后端的工作壓力相當(dāng)大。從發(fā)布端角度來看,它的網(wǎng)絡(luò)上行帶寬有限制,但充足的計算資源沒有得到有效利用。傳統(tǒng)HLS視頻直播回播系統(tǒng)把編碼切片等CPU密集型任務(wù)放在服務(wù)器端做,這樣隨著視頻發(fā)布端和/或播放端的增多,服務(wù)器成為系統(tǒng)的瓶頸,受限于服務(wù)器的計算資源(CPU/GPU),整個系統(tǒng)難以擴展,無法高效的支持高并發(fā)視頻直播服務(wù)。
另一方面,已有的視頻系統(tǒng)把直播和回播作為兩個不同的媒體內(nèi)容區(qū)別對待,導(dǎo)致直播時的播放URL和直播結(jié)束后回看的播放URL不相同,這樣給發(fā)布端和播放端帶來了很大不便。
技術(shù)實現(xiàn)要素:
:
本發(fā)明的目的是克服現(xiàn)有視頻直播回播技術(shù)的以上缺點,提出一種視頻直播回播系統(tǒng),以及使用所述視頻直播回播系統(tǒng)的視頻直播回播方法。
本發(fā)明的視頻直播回播系統(tǒng)包括發(fā)布端、播放端、云存儲CDN和視頻訪問網(wǎng)頁服務(wù)器;發(fā)布端包括錄制模塊、轉(zhuǎn)換模塊、上傳模塊、發(fā)布模塊;錄制模塊用于視頻采集、編碼、切片,并生成多個連續(xù)視頻文件;轉(zhuǎn)換模塊用于接收錄制模塊的連續(xù)視頻文件,并封裝,生成符合HLS規(guī)范要求的格式切片文件,即ts文件;上傳模塊用于接收轉(zhuǎn)換模塊的ts文件并上傳到云存儲CDN上,根據(jù)ts文件在云存儲CDN上的URL,修改m3u8文件,把最新的ts文件URL包含其中,最后把修改后的m3u8文件上傳到云存儲CDN上,m3u8文件和ts文件一起構(gòu)成完整的直播視頻;云存儲CDN除用于接收上傳模塊上傳的各個ts文件和m3u8文件,并接受播放端對直播視頻的請求;上傳模塊還用于把m3u8文件在云存儲CDN上的URL轉(zhuǎn)發(fā)給發(fā)布模塊;發(fā)布端用于對每個用戶或者設(shè)備分配一個唯一全局標識符,對每個用戶或者設(shè)備的每個直播視頻安排一個視頻標識符,所述視頻標識符為直播視頻的開始時間戳或者是序列號;m3u8文件在云存儲CDN上的URL一一對應(yīng)于全局標識符和視頻標識符;發(fā)布端的發(fā)布模塊還用于把視頻訪問網(wǎng)頁服務(wù)器的容器網(wǎng)頁、全局標識符、視頻標識符、和m3u8文件組裝成視頻訪問URL,通過第三方消息服務(wù)向播放端發(fā)布所述視頻訪問URL;播放端通過視頻訪問URL,下載直播視頻對應(yīng)的各個視頻文件進行播放。。
進一步,使用本發(fā)明的視頻直播回播系統(tǒng),本發(fā)明提供了一種視頻直播方法,其包括以下步驟:
步驟一、錄制模塊執(zhí)行視頻采集、編碼、切片,生成多個連續(xù)視頻文件;
步驟二、轉(zhuǎn)換模塊接收錄制模塊的連續(xù)視頻文件,并封裝,生成符合HLS規(guī)范要求的視頻切片文件,即ts文件;上傳模塊接收轉(zhuǎn)換模塊的ts文件并上傳到云存儲CDN上;上傳模塊根據(jù)云存儲CDN上ts文件的URL,修改m3u8文件,把最新的ts文件URL包含其中,最后把修改后的m3u8文件上傳到云存儲CDN上;
步驟三、發(fā)布端對每個用戶分配一個唯一全局標識符,對每個用戶或者設(shè)備的每個直播視頻安排一個視頻標識符,所述視頻標識符為視頻的開始時間戳或者是序列號;
步驟四、發(fā)布端的發(fā)布模塊把視頻訪問網(wǎng)頁服務(wù)器的容器網(wǎng)頁、全局標識符、視頻標識符、和m3u8文件組裝成視頻訪問URL,通過第三方消息服務(wù)向播放端發(fā)布所述視頻訪問URL;
步驟五、播放端支持HLS視頻流,通過視頻訪問URL,下載直播視頻對應(yīng)的各個視頻切片文件進行直播。
再進一步,使用本發(fā)明的視頻直播回播系統(tǒng),本發(fā)明提供了一種視頻直播回播方法,其包括以下步驟:
步驟一、錄制模塊執(zhí)行視頻采集、編碼、切片,生成多個連續(xù)視頻文件;
步驟二、轉(zhuǎn)換模塊接收錄制模塊的連續(xù)視頻文件,并封裝,生成符合HLS規(guī)范要求的格式視頻切片文件,即ts文件;上傳模塊接收轉(zhuǎn)換模塊的ts文件并上傳到云存儲CDN上;上傳模塊根據(jù)云存儲CDN上各個ts文件的URL,修改m3u8文件,把最新的ts文件URL包含其中,最后把修改后的m3u8文件上傳到云存儲CDN上;
步驟三、發(fā)布端對每個用戶或者設(shè)備分配一個唯一全局標識符,對每個用戶或者設(shè)備的每個直播視頻安排一個視頻標識符,所述視頻標識符為直播視頻的開始時間戳或者是序列號;
步驟四、發(fā)布端的發(fā)布模塊把視頻訪問網(wǎng)頁服務(wù)器的容器網(wǎng)頁、全局標識符、視頻標識符、和m3u8文件組裝成視頻訪問URL,通過第三方消息服務(wù)向播放端發(fā)布視頻訪問URL;
步驟五、播放端支持HLS視頻流,通過視頻訪問URL,下載直播視頻對應(yīng)的各個視頻切片文件進行直播;
步驟六、直播結(jié)束后,發(fā)布端的上傳模塊最后一次更新云存儲CDN上的m3u8文件,以包含整個視頻流的所有ts文件的URL
步驟七、播放端訪問步驟六的URL,收看完整直播視頻的回播。
本發(fā)明具有以下效果和優(yōu)點:
首先,本發(fā)明提出的視頻直播回播系統(tǒng),在源頭(即發(fā)布端)完成HLS視頻流內(nèi)容的加工(包括視屏采集,編碼,視頻切片ts文件和生成m3u8索引文件),然后把視頻切片和索引文件上傳到后端服務(wù)器,通過 CDN(Content Delivery Network)內(nèi)容分發(fā)網(wǎng)絡(luò)把視頻流分發(fā)出去,這樣的好處是發(fā)布端和后端各司其職,發(fā)布端的高性能CPU/GPU得到了充分利用,不僅僅做了視頻采集還完成了編碼和切片,把CPU/GPU計算密集型的工作處理掉。于是后端服務(wù)器的工作得以簡化,去除了視頻編碼切片功能,只保留單純的文件分發(fā)功能,后端收取發(fā)布端上傳的ts切片文件和m3u8切片索引文件,然后通過CDN把視頻切片文件(靜態(tài)文件)分發(fā)出去,這正是CDN所擅長的。整個系統(tǒng)在終端視頻采集設(shè)備和服務(wù)器之間合理分配工作(CPU密集型工作和IO密集型工作),避免了系統(tǒng)性能瓶頸,具有高度的可擴展性。
其次,傳統(tǒng)系統(tǒng)對直播和回播采用不同的技術(shù)方案,導(dǎo)致直播和回播的訪問URL無法統(tǒng)一。如果發(fā)布者分享了一個直播,觀眾只能在直播時訪問,否則會被告知直播已結(jié)束。本發(fā)明提出的視頻直播回播方法,統(tǒng)一了直播和回播的訪問URL,即使直播結(jié)束,觀眾一樣可以通過同一個訪問URL看到整個視頻的回播。
附圖說明:
以下結(jié)合附圖和具體實施方式來進一步說明本發(fā)明。
圖1是本發(fā)明視頻直播回播方法的系統(tǒng)架構(gòu)圖;
圖2是傳統(tǒng)視頻播放系統(tǒng)的架構(gòu)圖。
具體實施方式:
為了使本發(fā)明實現(xiàn)的技術(shù)手段、創(chuàng)作特征、達成目的與功效易于明白了解,下面結(jié)合具體圖示,進一步闡述本發(fā)明的實施方式。
如圖1所示,本發(fā)明的視頻直播回播系統(tǒng)的實施例包括發(fā)布端、播放端、云存儲CDN和視頻訪問網(wǎng)頁服務(wù)器。發(fā)布端包括錄制模塊、轉(zhuǎn)換模塊、上傳模塊;發(fā)布端的上傳模塊與云存儲CDN之間通過HTTP/HTTPS通信,云存儲CDN與播放端之間通過HTTP/HTTPS通信;錄制模塊用于視頻采集、編碼、切片,并生成連續(xù)視頻文件;轉(zhuǎn)換模塊用于接收錄制模塊的連續(xù)視頻文件,并封裝,生成符合HLS規(guī)范要求的格式視頻切片文件,即ts文件;上傳模塊用于接收轉(zhuǎn)換模塊的ts文件并上傳到云存儲CDN上;上傳模塊根據(jù)云存儲CDN上各個ts文件的URL,修改m3u8文件,把最新的ts文件URL包含其中,最后把修改后的m3u8文件上傳到云存儲CDN上,m3u8文件和多個ts文件一起構(gòu)成一個完整的直播視頻;云存儲CDN把直播視頻的HLS視頻流分發(fā)到播放端;播放端通過HTTP下載m3u8文件,然后根據(jù)m3u8文件下載視頻對應(yīng)的各個視頻文件進行播放。
使用本發(fā)明的視頻直播回播系統(tǒng),本發(fā)明提供了一種視頻直播方法,其包括以下步驟:
步驟一、錄制模塊執(zhí)行視頻采集、編碼、切片,生成多個連續(xù)視頻文件;
步驟二、轉(zhuǎn)換模塊接收錄制模塊的連續(xù)視頻文件,并封裝,生成符合HLS規(guī)范要求的視頻切片文件,即ts文件;上傳模塊接收轉(zhuǎn)換模塊的ts文件并上傳到云存儲CDN上;上傳模塊根據(jù)云存儲CDN上ts文件的URL,修改m3u8文件,把最新的ts文件URL包含其中,最后把修改后的m3u8文件上傳到云存儲CDN上;
步驟三、發(fā)布端對每個用戶分配一個唯一全局標識符,對每個用戶或者設(shè)備的每個視頻安排一個視頻標識符,所述視頻標識符為直播視頻的開始時間戳或者是序列號;
步驟四、發(fā)布端的發(fā)布模塊把視頻訪問網(wǎng)頁服務(wù)器的容器網(wǎng)頁、全局標識符、視頻標識符、和m3u8文件組裝成視頻訪問URL,通過第三方消息服務(wù)向播放端發(fā)布所述視頻訪問URL;
步驟五、播放端支持HLS視頻流,通過視頻訪問URL,下載直播視頻對應(yīng)的各個視頻切片文件進行直播。
使用本發(fā)明視頻直播回播系統(tǒng)實施例,本發(fā)明提供了一種視頻直播回播方法,其包括以下步驟:
步驟一、錄制模塊執(zhí)行視頻采集、編碼、切片,生成多個連續(xù)視頻文件;
步驟二、轉(zhuǎn)換模塊接收錄制模塊的連續(xù)視頻文件,并封裝,生成符合HLS規(guī)范要求的格式視頻切片文件,即ts文件;上傳模塊接收轉(zhuǎn)換模塊的ts文件并上傳到云存儲CDN上;上傳模塊根據(jù)云存儲CDN上各個ts文件的URL,修改m3u8文件,把最新的ts文件URL包含其中,最后把修改后的m3u8文件上傳到云存儲CDN上;
步驟三、發(fā)布端對每個用戶或者設(shè)備分配一個唯一全局標識符,對每個用戶或者設(shè)備的每個視頻安排一個視頻標識符,所述視頻標識符為直播視頻的開始時間戳或者是序列號;
步驟四、發(fā)布端的發(fā)布模塊把視頻訪問網(wǎng)頁服務(wù)器的容器網(wǎng)頁、全局標識符、視頻標識符、和m3u8文件組裝成視頻訪問URL,通過第三方消息服務(wù)向播放端發(fā)布視頻訪問URL;
步驟五、播放端支持HLS視頻流,通過視頻訪問URL,下載視頻對應(yīng)的各個視頻切片文件進行直播;
步驟六、直播結(jié)束后,發(fā)布端的上傳模塊最后一次更新云存儲CDN上的m3u8文件,以包含整個視頻流的所有ts文件的URL
步驟七、播放端訪問步驟六的URL,收看完整直播視頻的回播。
這樣直播和回播使用同一個視頻訪問URL。
本發(fā)明提及的m3u8文件既支持直播也回播。現(xiàn)舉兩個例子,例1為直播時m3u8文件的內(nèi)容,例2為回播時m3u8文件的內(nèi)容。直播時,m3u8文件只記錄最近的幾個視頻切片文件。當(dāng)直播結(jié)束,用作回播的m3u8文件包括了所有的視頻切片文件元信息,并以#EXT-X-ENDLIST結(jié)尾。這里的關(guān)鍵問題是如何把對兩者的支持統(tǒng)一起來。
本發(fā)明提出的方案使得直播和回播統(tǒng)一了m3u8 URL。首先在發(fā)布端記錄一個全局唯一標識符UDID,這個UDID可以是用戶標識符,也可以是設(shè)備標識符,只需要系統(tǒng)內(nèi)全局唯一即可。然后記錄直播視頻的視頻標識符VID,該標識符可以是視頻開始時間戳,也可以是序列號,只需要保證在UDID的上下文限定下唯一即可。這兩個標識符共同保證了視頻標識在系統(tǒng)內(nèi)的唯一性。可以使用簡單的字符串拼接或安全散列函數(shù)(SHA-1,MD5等),由輸入UDID和VID生成m3u8 在CDN上的URL,例如:http://CDN/UDID/VID.m3u8。
到這一步,直播和回播使用同一個URL訪問m3u8文件。直播時,發(fā)布端定期更新云存儲CDN上的m3u8文件,包含了直播中不斷生成的視頻切片文件在云存儲CDN上的URL。直播結(jié)束后,發(fā)布端最后一次更新CDN上的m3u8文件,以包含整個視頻流的所有切片文件URL。
例1:
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:8 #EXT-X-MEDIA-SEQUENCE:2680 #EXTINF:8, https://priv.example.com/fileSequence2680.ts #EXTINF:8, https://priv.example.com/fileSequence2681.ts #EXTINF:8, https://priv.example.com/fileSequence2682.ts
例2:
#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:8 #EXTINF:8, https://priv.example.com/fileSequence2679.ts #EXTINF:8, https://priv.example.com/fileSequence2680.ts #EXTINF:8, https://priv.example.com/fileSequence2681.ts #EXTINF:8, https://priv.example.com/fileSequence2682.ts #EXTINF:8, https://priv.example.com/fileSequence2683.ts #EXT-X-ENDLIST
Web瀏覽器通過HTML的<video>標簽支持播放HLS視頻流,標簽有一個src屬性指向m3u8 URL,這里需要一個Web 網(wǎng)頁作為內(nèi)嵌HLS視頻的容器。
<html> <head> </head> <body> <video id="player" controls="controls" src="placeholder"></video> </body> </html>
HLS視頻容器網(wǎng)頁代碼示例
這個容器網(wǎng)頁(playback.html)可以作為靜態(tài)網(wǎng)頁放在任何網(wǎng)絡(luò)服務(wù)器上,例如 http://mybackend.com/playback.html,通過URL的查詢字符串,帶上m3u8 的URL信息,最后播放URL形如(完全版URL),容器網(wǎng)頁中的腳本從URL查詢字符串中提取m3u8文件的URL,然后用m3u8 URL替換掉video 的src屬性中占位符(placeholder)。
這條URL包含三個主要信息:1.這是播放頁面。2.發(fā)布者的用戶標識符是UDID。3.該發(fā)布者發(fā)布的視頻標識符為VID。基于此,播放URL可以簡化為 http://mybackend.com/playback/UDID/VID(簡版URL)。通過服務(wù)器端URL重寫(URL Rewrite)機制,把簡版URL轉(zhuǎn)換成完全版URL
此外還有一種方案,把容器網(wǎng)頁作為動態(tài)頁面,由服務(wù)器在收到HTTP GET請求時動態(tài)生成。例如上述的簡版URL,服務(wù)器收到對應(yīng)這個URL的HTTP GET請求時,不是采用URL重寫機制,而是直接在HTML播放頁模版基礎(chǔ)上,把video標簽的src屬性替換為m3u8文件URL,然后返回給客戶端。
用戶通過發(fā)布模塊可以在直播時或直播結(jié)束后把以上的視頻訪問URL 通過消息服務(wù)發(fā)送給播放端,消息服務(wù)可以是傳統(tǒng)的手機短信,也可以是微信消息或者微博等互聯(lián)網(wǎng)服務(wù)。播放端接收到這個URL后,點開鏈接,調(diào)起瀏覽器打開容器網(wǎng)頁,用戶就可以即刻播放該視頻流。
發(fā)布端以手機移動設(shè)備為例,手機在開始錄制視頻時,記錄下時間戳作為視頻標識符 VID。手機端采集視頻幀,每隔一個時間片(例如5秒鐘)編碼生成一個臨時視頻文件,不同的手機操作系統(tǒng)支持支持不同的編碼方式,可能是mpeg4編碼,也可能是h.264編碼等其他編碼。這個臨時視頻文件在iPhone上一般以mov格式封裝,在安卓手機上一般以mp4格式封裝。然后做進一步處理,把臨時視頻文件重新轉(zhuǎn)碼封裝成HLS協(xié)議要求的mpeg2-ts的視頻切片文件(文件擴展名.ts)。再后,把ts文件上傳到CDN。最后為了包含最新的視頻切片(.ts文件)在CDN上的URL等元信息,更新索引文件(.m3u8文件),并上傳到CDN。CDN上的切片索引文件URL就是這個HLS視頻流的訪問入口。直播過程中,新的切片文件不停的產(chǎn)生并被不停的上傳至云存儲CDN,相應(yīng)的索引文件也不斷的更新,直到直播結(jié)束,這時手機會對索引文件發(fā)起一個完整更新,包含了之前所有的視頻切片URL,視頻流從直播狀態(tài)變成回播狀態(tài)。
以圖1舉例來說,某一次直播產(chǎn)生了一組.ts文件,對應(yīng)的URL是 http://CDN/UDID01/VID001/s001.ts http://CDN/UDID01/VID001/s002.ts ... 同時產(chǎn)生了一個.m3u8文件,對應(yīng)的URL是http://CDN/UDID01/VID001.m3u8。
完全版播放URL形如
,簡版播放URL形如 http://mybackend.com/playback/UDID01/VID001。
發(fā)布端手機把以上的播放URL 通過手機短信或互聯(lián)網(wǎng)服務(wù)分享給播放端手機。iPhone和安卓手機網(wǎng)頁瀏覽器均支持HLS視頻流播放,播放端手機接收到這個URL后,點開鏈接,調(diào)起手機網(wǎng)頁瀏覽器打開容器網(wǎng)頁,用戶就可以即刻播放該HLS視頻流。