本發(fā)明涉及一種支持多協(xié)議輸入和輸出的流媒體服務(wù)器系統(tǒng),屬于多媒體及網(wǎng)絡(luò)技術(shù)領(lǐng)域。
背景技術(shù):
隨著新媒體、融合媒體業(yè)務(wù)的發(fā)展及多種終端的普及應(yīng)用,對流媒體服務(wù)器的功能及性能提出了越來越高的要求。流媒體服務(wù)器輸出的視頻流需要支持pc機、智能移動設(shè)備(如安裝android、ios系統(tǒng)的智能手機),iptv、ott等應(yīng)用(要求輸入udpts流)的播放。同時,為滿足日益提高的用戶體驗,流媒體服務(wù)器需支持視頻直播與點播,播放過程中截取當(dāng)前畫面,通過進度條預(yù)覽小視頻實現(xiàn)視頻的拖拽定位等多種功能。
現(xiàn)有的流媒體服務(wù)器主要有以下幾種:
windowsmediaserver流媒體服務(wù)器,其支持mms協(xié)議,隨著絕大部分瀏覽器都支持adobeflashplayer,windowsmediaserver對應(yīng)的windowmediaplayer插件的使用率已經(jīng)不高,故windowsmediaserver流媒體服務(wù)器逐步淡出了國內(nèi)業(yè)界的應(yīng)用。
adobeflashmediaserver3.0/4.0是adobe提供的流媒體服務(wù)器,其支持rtmp的直播與點播應(yīng)用,但是其輸出的視頻流僅能滿足pc端的flash播放器的播放,無法支持hls流的播放。adobeflashmediaserver4.5及更高版本逐步支持hls流的應(yīng)用,但其需要同時配置apachehttp服務(wù)器,部署相對復(fù)雜,成本也較高。adobeflashmediaserver的各版本都不支持hls,rtmp,udpts流的轉(zhuǎn)發(fā),也不支持視頻流通過udpts組播的方式發(fā)送。
red5流媒體服務(wù)器是開源的流媒體服務(wù)器方案,其早期版本支持rtmp的直播與點播應(yīng)用,高版本也支持hls流的應(yīng)用,但其不支持hls,rtmp,udpts流的轉(zhuǎn)發(fā),也不支持視頻流通過udpts組播的方式發(fā)送,另外,其系統(tǒng)穩(wěn)定性難以保證,不適于商業(yè)領(lǐng)域的推廣應(yīng)用,更適于作為流媒體服務(wù)器技術(shù)的研究對象。
技術(shù)實現(xiàn)要素:
鑒于上述原因,本發(fā)明的目的在于提供一種支持多協(xié)議輸入和輸出的流媒體服務(wù)器系統(tǒng),支持多種協(xié)議的輸入、多種協(xié)議的輸出,支持多種終端的流媒體播放,功能強大,使用方便,提高用戶體驗。
為實現(xiàn)上述目的,本發(fā)明采用以下技術(shù)方案:
一種支持多協(xié)議輸入和輸出的流媒體服務(wù)器系統(tǒng),包括:協(xié)議分析模塊、數(shù)據(jù)流分析處理模塊,
定義客戶端發(fā)送的請求消息的訪問規(guī)則,該請求消息中包括協(xié)議類型、應(yīng)用類型,協(xié)議類型包括rtmp、http協(xié)議,應(yīng)用類型包括直播、點播,對于http協(xié)議的直播應(yīng)用,請求消息中包括請求的文件名,對于點播應(yīng)用,請求消息中包括請求的文件名及其對應(yīng)的物理路徑,
協(xié)議分析模塊,用于對接收的請求消息按照訪問規(guī)則進行解析處理,根據(jù)解析結(jié)果,將請求消息發(fā)送至相應(yīng)的數(shù)據(jù)流分析處理模塊進行相應(yīng)的處理;
數(shù)據(jù)流分析處理模塊包括rtmp處理模塊、直播切片生成模塊、點播文件實時切片模塊、m3u8文件處理模塊、ts文件處理模塊、flv文件處理模塊、mp4文件處理模塊,
rtmp處理模塊,用于處理rtmp直播流的發(fā)布,直播流的播放,點播文件的播放,
直播切片生成模塊,用于根據(jù)接收的rtmp直播流,生成切片文件,
點播文件實時切片模塊,用于根據(jù)hls請求消息,對mp4、flv文件進行實時切片處理,
m3u8文件處理模塊,用于處理hls點播與直播的請求消息,
ts文件處理模塊,用于處理ts文件的點播與直播的請求消息,
flv文件處理模塊,用于處理flv文件的點播與直播的請求消息,
mp4文件處理模塊,用于處理mp4文件的點播與直播的請求消息。
所述應(yīng)用類型還包括中轉(zhuǎn),系統(tǒng)還包括數(shù)據(jù)流中轉(zhuǎn)處理模塊,其包括udpts中轉(zhuǎn)模塊、hls中轉(zhuǎn)模塊、rtmp中轉(zhuǎn)模塊,分別用于從第三方系統(tǒng)獲取udpts數(shù)據(jù)流、hls切片文件、rtmp直播數(shù)據(jù)流,獲取的數(shù)據(jù)均保存為切片文件,供客戶端訪問獲取。
支持多協(xié)議輸入和輸出的流媒體服務(wù)器系統(tǒng),還包括udpts輸出模塊,用于將rtmp數(shù)據(jù)流與hls中轉(zhuǎn)模塊、rtmp中轉(zhuǎn)模塊、udpts中轉(zhuǎn)模塊中轉(zhuǎn)的數(shù)據(jù)流,以udpts數(shù)據(jù)流的方式轉(zhuǎn)發(fā),以支持各種編碼器的輸入,機頂盒的輸入。
所述直播切片生成模塊根據(jù)接收的rtmp直播數(shù)據(jù)流,判斷為視頻關(guān)鍵幀數(shù)據(jù)時,開始生成flv文件,接收數(shù)據(jù)的過程中,每收到新的視頻關(guān)鍵幀就判斷已收到的視頻時長是否已到達了預(yù)定的切片時長,若到達,停止生成flv文件,將flv文件轉(zhuǎn)換為對應(yīng)的ts文件與支持hls多碼流的64k音頻ts文件;按照上述過程持續(xù)生成切片文件,當(dāng)生成的切片文件超過三個,開始生成hls對應(yīng)的m3u8文件。
點播文件實時切片模塊接收請求m3u8文件的請求消息,確定該文件對應(yīng)的物理路徑,判斷該路徑下是否已經(jīng)存在該文件,若存在則讀取該m3u8文件,返回客戶端,若文件不存在,則生成m3u8文件,然后返回給客戶端;
點播文件實時切片模塊接收請求切片文件的請求消息,判段該文件對應(yīng)的物理路徑下是否已經(jīng)存在該切片文件,若存在,則讀取該切片文件,返回給客戶端,若不存在,則實時生成切片文件,再返回給客戶端。
生成m3u8文件及切片文件的過程中,線程加鎖處理。
對于http協(xié)議的請求消息,還包括實時視頻截圖請求及截圖開始時間點,所述數(shù)據(jù)流分析處理模塊還包括圖片文件處理模塊,其用于根據(jù)實時視頻截圖請求,從截圖開始時間點對請求的文件進行截圖,將生成的圖片文件保存于一臨時目錄,并返回給客戶端。
支持多協(xié)議輸入和輸出的流媒體服務(wù)器系統(tǒng),還包括文本與html處理模塊,對于應(yīng)用類型為點播、請求的文件為文本文件的請求消息,根據(jù)請求消息確定物理路徑,從該物理路徑下讀取請求的文本文件,并返回給客戶端。
對于http協(xié)議的請求消息,還包括獲取預(yù)覽小視頻的請求及小視頻開始時間點,
若請求消息請求的文件類型為flv文件,所述flv文件處理模塊,根據(jù)請求消息確定文件及其物理路徑,根據(jù)開始時間點,以切片方式生成flv切片文件,將該flv切片文件返回給客戶端;
若請求消息請求的文件類型為mp4文件,所述mp4文件處理模塊,根據(jù)請求消息確定文件及其物理路徑,根據(jù)開始時間點,以切片方式生成mp4切片文件,將該mp4切片文件返回給客戶端。
支持多協(xié)議輸入和輸出的流媒體服務(wù)器系統(tǒng),還包括配置模塊,用于配置系統(tǒng)運行的各項參數(shù),每種應(yīng)用類型對應(yīng)一組參數(shù),參數(shù)包括應(yīng)用類型,對應(yīng)的物理路徑,是否支持rtmp輸出,是否支持hls輸出,是否支持m3u8,是否支持flv,是否支持hls64k音頻流輸出,是否支持獲取預(yù)覽小視頻的輸出,是否支持視頻實時截圖,配置udpts輸出地址,定義切片文件時長,配置中轉(zhuǎn)發(fā)布點,定義最大并發(fā)連接數(shù),定義運行計劃,配置訪問策略。
本發(fā)明的優(yōu)點是:
1、本發(fā)明的流媒體服務(wù)器系統(tǒng)支持多協(xié)議輸入,包括支持標(biāo)準(zhǔn)的rtmp數(shù)據(jù)流的發(fā)布直播,hls數(shù)據(jù)流的直播輸入,udpts流的輸入;
2、本發(fā)明的流媒體服務(wù)器系統(tǒng)支持多協(xié)議輸出,包括支持rtmp數(shù)據(jù)流的直播與點播輸出,hls數(shù)據(jù)流的直播與點播輸出,udpts流的輸出,支持http1.1的文件下載或視頻文件播放;rtmp數(shù)據(jù)流的點播輸出支持mp4,flv文件的輸出;hls數(shù)據(jù)流的點播輸出支持對mp4,flv文件的實時切片,實時截圖;支持flash播放視頻的同時,在進度條請求預(yù)覽進度的小視屏的輸出;
3、本發(fā)明的流媒體服務(wù)器系統(tǒng)輸出的音視頻流支持多種終端的播放,包括pc端adobeflash播放器的播放,安裝ios、android系統(tǒng)的智能終端,其內(nèi)置視頻播放器的播放;支持標(biāo)準(zhǔn)udpts輸入的編碼器、機頂盒的播放。
4、本發(fā)明的流媒體服務(wù)器系統(tǒng),能夠?qū).264格式的ts流或rtmp直播數(shù)據(jù)流或流媒體文件,統(tǒng)一轉(zhuǎn)換為適于不同類型終端應(yīng)用的不同協(xié)議、不同碼流和不同封裝格式的數(shù)據(jù)流,實現(xiàn)同一視頻流或節(jié)目源在不同類型終端的自適應(yīng)播放,功能強大,提高用戶體驗。
附圖說明
圖1是本發(fā)明的系統(tǒng)組成框圖。
具體實施方式
以下結(jié)合附圖和實施例對本發(fā)明作進一步詳細的描述。
一、名稱解釋
ts數(shù)據(jù)流:即傳送流(transportstream),傳送流由一道或多道節(jié)目數(shù)據(jù)流組成,每道節(jié)目數(shù)據(jù)流由一個或多個原始流和一些其他流復(fù)合在一起,包括視頻流、音頻流、節(jié)目特殊信息流(如ts流中的psi信息表)和其他數(shù)據(jù)包。udpts:即以udp組播或單播方式發(fā)送已經(jīng)打包完成的ts數(shù)據(jù)包。
rtmp:即實時消息傳輸協(xié)議(realtimemessagingprotocol),包括rtmp基本協(xié)議及rtmpt/rtmps/rtmpe等多種變種協(xié)議,主要用于在flash/air平臺和支持rtmp協(xié)議的流媒體/交互服務(wù)器之間實現(xiàn)音視頻等數(shù)據(jù)通信。
hls:即httplivestreaming,是一種蘋果公司的動態(tài)碼率自適應(yīng)技術(shù),主要用于pc和蘋果終端的音視頻服務(wù)。其包括一個m3u8索引文件,ts媒體分片文件和key加密串文件,其工作原理是把整個數(shù)據(jù)流分成若干小的基于http協(xié)議的文件下載,每次只下載一部分,當(dāng)多媒體數(shù)據(jù)流正在播放時,客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源,允許流媒體會話適應(yīng)不同的數(shù)據(jù)速率。
hls直播切片文件:是指每個小的能夠獨立播放的音視頻文件,一般為ts數(shù)據(jù)文件,也稱ts切片文件。
二、技術(shù)方案
如圖1所示,本發(fā)明公開的支持多協(xié)議輸入和輸出的流媒體服務(wù)器系統(tǒng),包括:配置模塊、協(xié)議分析模塊、數(shù)據(jù)流分析處理模塊、數(shù)據(jù)流中轉(zhuǎn)處理模塊、udpts輸出處理模塊。
本發(fā)明中,為便于系統(tǒng)部署與維護,各種協(xié)議的數(shù)據(jù)流的輸入與輸出均使用同一個監(jiān)聽端口號,這種情況下,為滿足rtmp與http兩種協(xié)議的訪問,對客戶端發(fā)送的請求消息定義如下訪問規(guī)則:
1、rtmp請求消息
rtmp直播請求的請求消息為:
rtmp://ip:port/application/streamname
rtmp點播請求的請求消息為:
rtmp://ip:port/application/streamname/dir/filename.***
其中,application為應(yīng)用類型,包括直播live、點播vod、中轉(zhuǎn)relay三種,中轉(zhuǎn)是指音視頻數(shù)據(jù)來自第三方系統(tǒng)的udpts流、hls數(shù)據(jù)流、rtmp數(shù)據(jù)流;streamname為發(fā)布點;dir為請求資源在服務(wù)器系統(tǒng)中保存的物理路徑(如,d:\dir1\dir2),filename為請求資源的文件名,***為文件后綴類型(如,可以是fiv、mp3、mp4)。
2、http請求消息
http直播請求的請求消息為:
http://ip:port/application/streamname/filename.***
http點播請求的請求消息為:
http://ip:port/application/streamname/dir/filename.***
http視頻實時截圖的請求消息為:
http://ip:port/application/streamname/dir/filename.***/grabpic.jpg?start=time
http獲取預(yù)覽小視頻的請求消息為:
http://ip:port/application/streamname/dir/filename.***/smallvideo.flv?start=time
其中,application為應(yīng)用類型,streamname為發(fā)布點,dir為請求資源在服務(wù)器系統(tǒng)中保存的物理路徑,filename為請求資源的文件名,***是文件后綴類型(如,可以是flv、mp4),grabpic.jpg為視頻實時截圖的請求,smallvideo.flv為獲取預(yù)覽小視頻的請求。
請求消息舉例如下:
1)直播
假設(shè)編碼器向服務(wù)器(ip地址為192.168.1.30,端口號為1935)發(fā)布rtmp數(shù)據(jù)流,應(yīng)用類型為直播live,發(fā)布點名為live201,即,向服務(wù)器輸入rtmp直播數(shù)據(jù)流,則,
rtmp直播請求的請求消息為:
rtmp://192.168.1.30:1935/live/live201
hls視頻播放的請求消息為:
http://192.168.1.30:1935/live/live201/video.m3u8
hls音頻播放的請求消息為:
http://192.168.1.30:1935/live/live201/audio.m3u8
hls包括音視頻的多碼流請求消息為:
http://192.168.1.30:1935/live/live201/main.m3u8
hls下載切片文件的請求消息為:
http://192.168.1.30:1935/live/live201/live201_201605010935_video_seq_1.ts
http://192.168.1.30:1935/live/live201/live201_201605010945_video_seq_2.ts
……
http://192.168.1.30:1935/live/live201/live201_201605010955_video_seq_n.ts
直播切片文件的保存路徑與文件名的生成的規(guī)則定義如下:切片文件(flv文件與ts文件)保存于一臨時目錄(可由配置文件指定),
臨時目錄的物理路徑為:臨時目錄(temp)\應(yīng)用名\發(fā)布點名\切片文件名,如,d:\temp\live\live201\filename\。
切片文件中視頻文件的命名規(guī)則是:發(fā)布點名_時間_video_seq_id.ext,
切片文件中音頻文件的命名規(guī)則是:發(fā)布點名_時間_video_seq_id.ext,其中ext為文件后綴,可以是flv或ts,id為切片序號,從1開始遞增。利用切片文件的保存路徑與文件名的命名規(guī)則,服務(wù)器系統(tǒng)可以根據(jù)http請求的內(nèi)容快速找到所請求的文件。
rtmp數(shù)據(jù)流可以支持adobeflashplayer播放器的播放,hls數(shù)據(jù)流可以支持安裝andorid、ios系統(tǒng)等多種終端設(shè)備內(nèi)置播放器的播放。
2)點播
假設(shè)服務(wù)器的ip地址為192.168.1.30,端口號為1935,應(yīng)用類型為點播vod,發(fā)布點名為vod1,文件在服務(wù)器中保存的物理路徑為gaoqing,文件名為demo.mp4,則,
rtmp點播請求的請求消息為:
rtmp://192.168.1.30:1935/vod/vod1/gaoqing/demo.mp4
hls視頻播放的請求消息為:
http://192.168.1.30:1935/vod/vod1/gaoqing/demo.mp4/video.m3u8
hls音頻播放的請求消息為:
http://192.168.1.30:1935/vod/vod1/gaoqing/demo.mp4/audio.m3u8
hls包括音視頻的多碼流請求消息為:
http://192.168.1.30:1935/vod/vod1/gaoqing/demo.mp4/main.m3u8
hls下載切片文件的請求消息為:
http://192.168.1.30:1935/vod/vod1/gaoqing/demo.mp4/video_seq_1.ts
http://192.168.1.30:1935/vod/vod1/gaoqing/demo.mp4/video_seq_2.ts
……
http://192.168.1.30:1935/vod/vod1/gaoqing/demo.mp4/video_seq_n.ts
其中,點播文件的保存路徑是:點播目錄(vod)\應(yīng)用名\發(fā)布點名\文件名,如,d:\vod\vod1\filename\。
視頻實時截圖的請求消息為:
http://192.168.1.30:1935/vod/vod1/gaoqing/demp.mp4/grabpic.jpg?start=10.0
其中,start=10.0表示在demp.mp4視頻的第10秒開始截圖。
flash播放器獲取預(yù)覽小視頻的請求消息為:
http://192.168.1.30:1935/vod/vod1/gaoqing/demp.mp4/smallvideo.flv?start=10.0
其中,start=10.0表示在demp.mp4視頻的第10秒開始獲取小視頻。
(一)配置模塊
配置模塊用于配置和加載系統(tǒng)的各項參數(shù),每種應(yīng)用類型對應(yīng)一組獨立的參數(shù)。參數(shù)包括:應(yīng)用類型,對應(yīng)的物理路徑,是否支持rtmp輸出,是否支持hls輸出,是否支持m3u8,是否支持flv,是否支持hls64k音頻流輸出,是否支持獲取預(yù)覽小視頻的輸出,是否支持視頻實時截圖,配置udpts輸出地址,定義切片文件時長,配置中轉(zhuǎn)發(fā)布點,定義最大并發(fā)連接數(shù),定義運行計劃,訪問策略等。其中,運行計劃定義了應(yīng)用類型對應(yīng)的開始和結(jié)束的時間區(qū)間,訪問策略可以配置是否啟用ip限制,文件是否加密,rtmp推流是否要求用戶名和密碼認證等。配置完成后,根據(jù)各項參數(shù),生成配置文件,于一具體實施例中,配置文件如下:
(二)協(xié)議分析模塊
根據(jù)接收的請求消息,判斷請求消息是http請求還是rtmp請求。具體的說,根據(jù)請求消息的前200字節(jié)數(shù)據(jù),若其中包含post或get字符串,判斷為http請求,否則為rtmp請求。
對于http請求,接收完整的http請求的頭信息,確定http頭信息中包含符合訪問規(guī)則的請求消息部分,確定請求資源的物理路徑,確定請求資源的文件名及文件后綴類型,根據(jù)分析處理結(jié)果,將相應(yīng)的請求消息發(fā)送至相應(yīng)的數(shù)據(jù)流分析處理模塊;對于rtmp請求,發(fā)送至rtmp處理模塊。
(三)數(shù)據(jù)流分析處理模塊
包括rtmp處理模塊、直播切片生成模塊、m3u8文件處理模塊、ts文件處理模塊、flv文件處理模塊、mp4文件處理模塊、文本與html處理模塊、圖片文件處理模塊、點播文件實時切片模塊。
1、rtmp處理模塊
rtmp處理支持rtmp直播流的發(fā)布,直播流的播放與點播文件的播放。rtmp處理模塊用于與請求的客戶端進行rtmp協(xié)議的握手連接,連接后對rtmp命令進行處理,根據(jù)rtmpconnect命令判斷客戶端的請求類型,請求類型包括直播發(fā)布,直播播放與點播文件播放三種,然后根據(jù)請求類型分別進行處理,具體如下。
對于rtmp直播發(fā)布的請求,首先進行授權(quán)認證處理,包括請求的客戶端ip地址是否通過ip認證,請求的發(fā)布點是否通過用戶名與密碼的驗證認證等,若認證失敗,則斷開rtmp連接,認證成功,則接收并處理音視頻數(shù)據(jù)流,即將接收的音視頻數(shù)據(jù)保存入緩沖隊列中,緩沖的數(shù)據(jù)一方面用于實時發(fā)送至客戶端播放,另一方面,發(fā)送至直播切片生成模塊,用于生成切片數(shù)據(jù),以支持各種基于hls協(xié)議的各終端的直播播放。
針對rtmp直播播放的請求,首先進行授權(quán)認證處理,包括ip認證、用戶名與密碼認證等,認證通過后,判斷請求的發(fā)布點是否存在,若不存在,則斷開rtmp連接,若存在,則向rtmp發(fā)布點登記一個rtmp流播放端,用于接收該發(fā)布點的音視頻數(shù)據(jù)流,接收的音視頻數(shù)據(jù)保存入緩沖隊列中,用于實時發(fā)送到客戶端播放。
若應(yīng)用類型為中轉(zhuǎn),需要判斷請求消息中的發(fā)布點對應(yīng)的切片文件是否已經(jīng)存在,若不存在則斷開rtmp連接,若存在則讀取切片文件,并將切片文件轉(zhuǎn)換為rtmp數(shù)據(jù)流發(fā)送到請求的客戶端。
rtmp點播文件播放的請求,首先進行授權(quán)認證處理,包括ip認證、用戶名與密碼認證等,認證通過后,根據(jù)請求的文件在服務(wù)器中保存的物理路徑,判斷該物理路徑下是否存在所請求的文件,若不存在則斷開rtmp連接,若存在,則于該物理路徑下找到所請求的文件,判斷請求的文件是否為符合rtmp協(xié)議的文件,即判斷請求的文件是否是mp4或flv文件,若均不是則斷開連接,若是其中一種類型的文件,繼續(xù)判斷視頻文件的視頻編碼是否是h.264或vp6,音頻編碼是否是aac或mp3,若編碼不符合rtmp協(xié)議則斷開rtmp連接,若編碼符合rtmp協(xié)議,則讀取出請求的文件,將mp4或flv文件的音頻幀與視頻幀封裝為rtmp數(shù)據(jù)包發(fā)送給客戶端。在rtmp數(shù)據(jù)流的播放過程中,rtmp處理模塊支持rtmp的seek,pause/resume命令。
2、直播切片生成模塊
直播切片生成模塊用于根據(jù)接收的音視頻數(shù)據(jù),生成切片文件。前述rtmp處理模塊對于rtmp直播發(fā)布的音視頻數(shù)據(jù),保存入緩沖隊列,并拷貝到直播切片生成模塊。直播切片模塊生成根據(jù)接收的音視頻數(shù)據(jù),生成切片文件。具體的說,直播切片生成模塊根據(jù)接收的音視頻數(shù)據(jù),判斷是否為視頻關(guān)鍵幀數(shù)據(jù),若不是則丟棄,以避免播放過程中出現(xiàn)馬賽克現(xiàn)象,接收到視頻關(guān)鍵幀后,開始生成flv文件,在持續(xù)接收音視頻數(shù)據(jù)的過程中,每收到新的視頻關(guān)鍵幀就判斷已收到的視頻時長是否已到達了定義的切片時長(如10秒),若到達預(yù)定的切片時長,停止生成flv文件,然后根據(jù)配置文件中配置的切片時長(如上述xml文件中的seqlen字段及其取值)的要求快速轉(zhuǎn)換為對應(yīng)的ts文件與支持hls多碼流的64k音頻ts文件;按照上述過程持續(xù)生成切片文件,當(dāng)生成的切片文件超過三個,開始生成hls對應(yīng)的m3u8文件,生成的切片文件保存入臨時目錄下,提供安裝android、ios系統(tǒng)的多種智能終端播放hls直播流。
3、點播文件實時切片模塊:
點播文件實時切片模塊用于根據(jù)客戶端的hls請求消息,對mp4與flv文件進行實時切片處理,以滿足多種終端播放的要求。利用點播文件實時切片模塊,用戶無需為了支持多種終端的播放而做額外的切片管理工作,如調(diào)用第三方工具對視頻文件進行切片,對歷史切片做刪除處理等。
點播文件實時切片模塊接收hls請求消息后,判斷請求的是m3u8文件,根據(jù)請求消息確定該文件對應(yīng)的物理路徑,根據(jù)點播切片文件的命名規(guī)則與物理路徑,判斷該路徑下是否已經(jīng)存在m3u8文件,若存在則讀取m3u8文件,以http響應(yīng)消息的方式返回客戶端,若文件不存在,則根據(jù)文件時長與文件關(guān)鍵幀的索引數(shù)據(jù)生成m3u8文件,然后將生成的m3u8文件返回給客戶端。為了保證效率,生成m3u8文件的過程中,點播文件實時切片模塊加鎖處理,以保證僅通過一個線程生成m3u8文件,m3u8文件生成后,其它線程訪問時讀取即可。
若請求的是m3u8文件中的切片文件(ts文件或flv文件),點播文件實時切片模塊先根據(jù)點播切片文件的命名規(guī)則與物理路徑,判斷臨時目錄下是否已經(jīng)存在該切片文件,若已存在,則讀取該切片文件,并以http響應(yīng)消息的方式返回給客戶端,若不存在,則實時生成切片文件,再以http響應(yīng)消息的方式返回給客戶端。為了保證效率,每個切片文件的生成過程中均做加鎖處理,切片文件生成時,無需做解碼處理,相當(dāng)于文件拷貝操作,能夠滿足實際的應(yīng)用需求。
4、m3u8文件處理模塊
m3u8文件處理模塊用于處理hls點播與直播索引的請求。m3u8文件處理模塊根據(jù)請求消息判斷所請求的m3u8文件,應(yīng)用類型是直播live還是點播vod;若應(yīng)用類型為直播,則根據(jù)直播切片文件的保存路徑與文件名規(guī)則,確定m3u8文件對應(yīng)的物理路徑,找到切片文件對應(yīng)的臨時目錄,讀取請求的m3u8文件;若請求的文件存在,則以http響應(yīng)消息的方式返回給客戶端,若不存在則返回失敗。若應(yīng)用類型為點播,則進入點播文件實時切片模塊進行相應(yīng)處理。
5、ts文件處理模塊
ts文件處理模塊用于處理ts文件的點播與直播請求。ts文件處理模塊,根據(jù)請求消息判斷所請求的ts文件,應(yīng)用類型是直播還是點播。
若應(yīng)用類型為直播live,則根據(jù)直播切片文件的保存路徑與文件名規(guī)則,確定ts文件對應(yīng)的物理路徑,找到切片文件對應(yīng)的臨時目錄,讀取請求的ts文件;若請求的文件存在,則以http響應(yīng)消息的方式返回給客戶端,若不存在則返回失敗。
若應(yīng)用類型為點播,則根據(jù)文件命判斷是正常的完整文件訪問還是切片文件訪問(切片文件名包含seq_id字段)。如果是正常的完整文件訪問,則根據(jù)文件的物理路徑,找到對應(yīng)的請求文件,以http響應(yīng)消息的方式返回給客戶端,若找不到,則返回失?。蝗绻乔衅募L問,則進入點播文件實時切片模塊進行相應(yīng)處理。
6、flv文件處理模塊
flv文件處理模塊用于處理flv文件的點播與直播請求。flv文件處理模塊根據(jù)請求消息判斷所請求的flv文件,應(yīng)用類型是直播、點播還是獲取預(yù)覽小視頻。
若應(yīng)用類型是直播,則根據(jù)直播切片文件的保存路徑與文件名規(guī)則,確定flv文件對應(yīng)的物理路徑,找到切片文件對應(yīng)的臨時目錄,讀取請求的flv文件,若請求的文件存在,則以http響應(yīng)消息的方式返回給客戶端,若不存在則返回失敗。
若應(yīng)用類型是獲取小視頻,則根據(jù)請求消息確定文件及其物理路徑,根據(jù)請求消息中的開始時間點與時長,以切片方式生成flv切片文件并保存于臨時目錄,將該flv切片文件以http響應(yīng)消息的方式返回給客戶端。
若應(yīng)用類型是點播,則根據(jù)請求消息中的文件名稱,判斷訪問的是正常的完整文件還是切片文件。對于正常的完整文件,根據(jù)請求消息中的物理路徑,找到所請求的文件,若文件存在則以http響應(yīng)消息的方式返回給客戶求端,若不存在則返回失??;對于切片文件,進入點播文件實時切片模塊進行相應(yīng)處理。
7、mp4文件處理模塊
mp4文件處理模塊用于處理mp4文件的點播與直播請求。mp4文件處理模塊根據(jù)請求消息所請求的mp4文件,應(yīng)用類型是獲取預(yù)覽小視頻還是點播。
若應(yīng)用類型是獲取小視頻,則根據(jù)請求消息確定文件及其物理路徑,根據(jù)請求的開始時間點與時長,以切片方式生成mp4切片文件并保存于臨時目錄,將mp4切片文件以http響應(yīng)消息的方式返回給客戶端。
若應(yīng)用類型是點播,則根據(jù)請求消息確定文件對應(yīng)的物理路徑,從該物理路徑下讀取請求的文件,若文件存在則以http響應(yīng)消息的方式返回給客戶端,若不存在則返回失敗。
8、文本與html處理模塊:
文本與html處理模塊用于對應(yīng)用類型為點播的文本文件(html,htm,shtml,txt,xml等)進行處理。文本與html處理模塊根據(jù)請求消息確定物理路徑,從該物理路徑下讀取請求的文件,若文件存在則以http響應(yīng)消息的方式返回給客戶端,若文件不存在則返回失敗。
9、圖片文件處理模塊:
圖片文件處理模塊用于對應(yīng)用類型為直播、點播的圖片文件(jpg,jpeg,gif,ico文件)進行處理。圖片文件處理模塊根據(jù)請求消息判斷是否包含視頻實時截圖的請求,若包含了視頻實時截圖請求,則根據(jù)請求消息確定物理路徑,根據(jù)截圖請求的開始時間點實時解碼,將生成的圖片文件保存到臨時目錄,將保存的圖片文件以http響應(yīng)消息的方式返回給客戶端。
(四)數(shù)據(jù)流中轉(zhuǎn)處理模塊
數(shù)據(jù)流中轉(zhuǎn)處理模塊包括udpts中轉(zhuǎn)模塊、hls中轉(zhuǎn)模塊、rtmp中轉(zhuǎn)模塊。
udpts中轉(zhuǎn)模塊用于從第三方系統(tǒng)獲取udpts數(shù)據(jù)流,并以切片文件的形式保存,最終按照統(tǒng)一的訪問規(guī)則接受不同客戶端的訪問,如rtmp請求,hls請求等。用戶在配置文件中配置的中轉(zhuǎn)發(fā)布點(例如上述xml文件中的relaymap字段及其取值)為每個需要中轉(zhuǎn)的udpts(如udp://224.1.1.100:6000)定義一個對應(yīng)的發(fā)布點名稱(如relay1)。中轉(zhuǎn)模塊啟動后即開始接收第三方系統(tǒng)發(fā)送的音視頻數(shù)據(jù),接收到第一個視頻關(guān)鍵幀數(shù)據(jù)后,開始以切片方式保存為flv文件,在持續(xù)接收音視頻數(shù)據(jù)的過程中,判斷是否為視頻關(guān)鍵幀,如果是關(guān)鍵幀,且保存的flv文件時長已經(jīng)超過預(yù)定的切片時長,則將flv切片文件轉(zhuǎn)換為ts文件。當(dāng)生成的切片文件數(shù)超過三個后,開始生成m3u8文件。文件命名與保存路徑規(guī)則遵循前述直播切片文件的保存路徑與文件名稱規(guī)則。
hls中轉(zhuǎn)模塊用于從第三方系統(tǒng)獲取hls切片文件,并以切片文件的形式保存,最終按照統(tǒng)一的訪問規(guī)則接受不同客戶端的訪問,如rtmp請求,hls請求等。用戶在配置文件中配置的中轉(zhuǎn)發(fā)布點(如上述xml文件中的relaymap字段及其取值)為每個需要中轉(zhuǎn)的hls(如http://192.168.1.30:1935/live/livel/video_m3u8)定義一個對應(yīng)的發(fā)布點。中轉(zhuǎn)模塊每下載一個ts文件后,將ts文件轉(zhuǎn)換為flv文件,下載成功超過三個切片文件后,開始生成m3u8文件。文件命名與保存路徑規(guī)則遵循前述直播切片文件的保存路徑與文件名稱規(guī)則。
rtmp中轉(zhuǎn)模塊用于從第三方系統(tǒng)獲取rtmp直播數(shù)據(jù)流,并以切片文件的形式保存,最終以統(tǒng)一的訪問規(guī)則接受不同客戶端的訪問,如rtmp請求,hls請求等。用戶在配置文件中配置的中轉(zhuǎn)發(fā)布點(如上述xml文件中的relaymap字段及其取值)為每個需要中轉(zhuǎn)的rtmp(如rtmp://192.168.1.30:1935/live/livel)定義一個對應(yīng)的發(fā)布點。
rtmp中轉(zhuǎn)模塊根據(jù)用戶的配置,啟動后開始以rtmpplay命令的模式從rtmp服務(wù)器讀取視音頻數(shù)據(jù)。視音頻數(shù)據(jù)先保存為flv文件,然后將保存成功的flv文件轉(zhuǎn)換為ts文件,切片文件數(shù)量超過三個后,開始生成m3u8文件。文件命名與保存路徑規(guī)則遵循前述直播切片文件的保存路徑與文件名稱規(guī)則。
(五)udpts輸出處理模塊
udpts輸出模塊用于將rtmp數(shù)據(jù)流與hls中轉(zhuǎn)模塊、rtmp中轉(zhuǎn)模塊、udpts中轉(zhuǎn)模塊中轉(zhuǎn)的數(shù)據(jù)流,以udpts數(shù)據(jù)流的方式轉(zhuǎn)發(fā),以支持不同廠商的編碼器輸入,機頂盒輸入。預(yù)先配置udpts輸出模塊的輸入源與輸出的目的地址,輸入源是指流服務(wù)器系統(tǒng)對應(yīng)的應(yīng)用與發(fā)布點。該模塊啟動后自動搜索最新已經(jīng)生成的切片文件,然后讀取切片文件,通過ts打包,發(fā)送到目標(biāo)地址。該模塊的配置實例可參見上述xml文件中的outputudps字段及其取值。
以上所述是本發(fā)明的較佳實施例及其所運用的技術(shù)原理,對于本領(lǐng)域的技術(shù)人員來說,在不背離本發(fā)明的精神和范圍的情況下,任何基于本發(fā)明技術(shù)方案基礎(chǔ)上的等效變換、簡單替換等顯而易見的改變,均屬于本發(fā)明保護范圍之內(nèi)。