李華菲
摘 要:隨著互聯(lián)網(wǎng)技術(shù)不斷地發(fā)展,人才招聘交流等網(wǎng)站越來(lái)越普遍。本課題通過(guò)介紹視頻直播的技術(shù)及安全性策略、直播系統(tǒng)后臺(tái)架構(gòu)采用的協(xié)議以及推流方式,完成了視頻源直接推流的測(cè)試。
關(guān)鍵詞:視頻流;推流;重緩沖
人才交流網(wǎng)的視頻直播系統(tǒng)在用戶播放時(shí),第一個(gè)用戶可能需要等待比較長(zhǎng)的時(shí)間,因?yàn)橐曨l轉(zhuǎn)碼需要一定的時(shí)間,這樣用戶播放時(shí)才能獲取到視頻流,考慮流媒體文件第一個(gè)的觀眾主觀感覺(jué)來(lái)衡量與評(píng)價(jià)系統(tǒng)服務(wù)性能,可以定義為基于應(yīng)用層(用戶)的Streaming測(cè)量技術(shù)[1]。在此推流用戶推流的時(shí)候可以首先啟動(dòng)原始碼率,開(kāi)啟VLC media player播放器進(jìn)行性能測(cè)試,測(cè)試的數(shù)據(jù)結(jié)果是用戶滿意程度的直接反饋。
根據(jù)以上情況,總結(jié)出衡量應(yīng)用層(用戶)為基礎(chǔ)的直播視頻播放效果:
第一,緩沖的時(shí)間:當(dāng)用戶進(jìn)入網(wǎng)站點(diǎn)擊直播播放url時(shí),至用戶可以正常觀看到直播視頻文件時(shí),此指標(biāo)可以評(píng)估服務(wù)器的轉(zhuǎn)碼性能以及數(shù)據(jù)傳輸在網(wǎng)絡(luò)上的延遲等。
第二,播放時(shí)的碼率:此標(biāo)準(zhǔn)主要是取決于畫(huà)面精細(xì)程度、流媒體原始數(shù)據(jù)的幀率、編碼形式以及網(wǎng)絡(luò)環(huán)境等。
第三,重緩沖:用戶直播流媒體視頻文件數(shù)據(jù)時(shí),如果緩沖區(qū)中數(shù)據(jù)資源并沒(méi)有滿足直播視頻播放的要求的話,得必需重復(fù)完成緩沖。
第四,畫(huà)面的質(zhì)量問(wèn)題:在視頻直播時(shí),直播播放的效果最終還是以用戶的主觀感受為直接依據(jù),并且衡量系統(tǒng)性能的視覺(jué)指標(biāo)以最終畫(huà)面質(zhì)量的好壞為參考。
1 視頻直播的技術(shù)及安全性策略
人才交流網(wǎng)的視頻直播系統(tǒng)相關(guān)的所有功能,包括碼率,水印,以及推流,播放等相關(guān)信息都是通過(guò)調(diào)度控制模塊完成,通過(guò)網(wǎng)站web端調(diào)用接口設(shè)置相關(guān)信息。 當(dāng)接受到前端發(fā)來(lái)消息后,根據(jù)參數(shù)判斷操作何種類(lèi)型,然后讀寫(xiě)mysql數(shù)據(jù)庫(kù)。
1.1 cache的設(shè)計(jì)
網(wǎng)站的訪問(wèn)人員(如求職人員)觀看視頻直播招聘會(huì)的時(shí)候,會(huì)通過(guò)訪問(wèn)url,跳轉(zhuǎn)到拉取直播視頻源的服務(wù)器上下載觀看視頻。首先從緩存(cache)中獲取視頻源信息。
1.1.1 cache的數(shù)據(jù)結(jié)構(gòu)
THashMap是第一級(jí)管理結(jié)構(gòu),包括了總的配置參數(shù)、針和桶。通過(guò)這個(gè)數(shù)據(jù)結(jié)構(gòu)實(shí)際上管理了3個(gè)THashNode的鏈表:add_list、free_list、bucket。
add_list:為了實(shí)現(xiàn)lru算法,將所有使用了的THashNode串起來(lái),雙向鏈表,用add_next_和add_prev_串接。
free_list:空閑的THashNode,等待被使用,單向鏈表用node_next_串接。
bucket:根據(jù)md5和bucket_size大小分配的桶,便于THashNode的查找。
1.1.2 算法選型
根據(jù)模擬用戶并發(fā)訪問(wèn)的數(shù)據(jù)主要包括用戶數(shù)和請(qǐng)求數(shù)。目前的緩存算法主要有:LRU算法、LFU算法、LRU-2算法。本課題分別用3種算法測(cè)試了整個(gè)流水的實(shí)驗(yàn)結(jié)果。據(jù)模擬的測(cè)試數(shù)據(jù)來(lái)看,選擇LRU-2,命中率:2.53%。
1.1.3 優(yōu)化
算法設(shè)計(jì)最主要涉及的是時(shí)間復(fù)雜度和空間復(fù)雜度的一對(duì)矛盾體。根據(jù)實(shí)際的業(yè)務(wù)場(chǎng)景,需要進(jìn)行不同的處理。目前隨著硬件水平的不斷發(fā)展,在很多服務(wù)器應(yīng)用場(chǎng)景中,往往都是空間容量充足,而謀求更快的處理速度。即犧牲空間復(fù)雜度,以獲取更快的訪問(wèn)速度[2-3]。
1.2 網(wǎng)站安全策略
通常的Web網(wǎng)頁(yè)攻擊主要包括兩類(lèi):一類(lèi)是利用Web網(wǎng)頁(yè)依賴的服務(wù)器存在的各類(lèi)漏洞進(jìn)行攻擊,常用的有CGI緩沖區(qū)溢出等攻擊;另外一種情況直接攻擊網(wǎng)頁(yè)前端自身遺留的安全漏洞,常用的方法是跨站腳本攻擊方式。
(1)常規(guī)防范Web應(yīng)用的攻擊方式:a、數(shù)據(jù)量過(guò)于龐大容易產(chǎn)生緩沖區(qū)的溢出——黑客通過(guò)構(gòu)造的多位進(jìn)制的代碼以及通過(guò)超出機(jī)器的存儲(chǔ)緩沖區(qū)容量,使網(wǎng)站服務(wù)器隨意完成一些惡意指令,危害網(wǎng)站的服務(wù)器輕易癱瘓。b、采用SQL注入方式——入侵用戶開(kāi)發(fā)SQL代碼,想辦法迫使網(wǎng)站服務(wù)器運(yùn)行時(shí),導(dǎo)致服務(wù)器產(chǎn)生漏洞,便可得到相關(guān)重要數(shù)據(jù)。
大部分網(wǎng)頁(yè)能產(chǎn)生服務(wù)器緩存的數(shù)據(jù),是客戶瀏覽網(wǎng)頁(yè)時(shí),瀏覽器解釋是HTML 和文本產(chǎn)生的。如動(dòng)態(tài)頁(yè)面緩存了非法信息,不管是客服端或服務(wù)器端,要是無(wú)充足的能力去鑒別這樣的入侵,或期間,一般的用戶只要點(diǎn)擊了,之后的程序跟著就會(huì)在點(diǎn)擊者的機(jī)器上自動(dòng)運(yùn)行,此時(shí)目標(biāo)機(jī)的相關(guān)信息便會(huì)被盜用,黑客就能更改用戶的配置、上傳假的廣告以及修改cookie 等形式的不同攻擊行為。
(2)HTTP Referer安全與反盜鏈:加入反盜鏈機(jī)制后,從其他非服務(wù)提供者指定的來(lái)源的HTTP請(qǐng)求就得不到正常結(jié)果了。
2 視頻直播系統(tǒng)后臺(tái)的設(shè)計(jì)與測(cè)試
常用的流媒體協(xié)議主要有 HTTP,RTMP/RTMPS等。
HTTP是蘋(píng)果公司實(shí)現(xiàn)的基于HTTP的流媒體傳輸協(xié)議,可實(shí)現(xiàn)流媒體的直播和點(diǎn)播。但是HTTP協(xié)議因?yàn)榇嬖谛?shù)據(jù)流的規(guī)則從而導(dǎo)致大量的文件,且需要消耗很多資源去處理或者是存儲(chǔ)這些較小的文件。如果要實(shí)現(xiàn)數(shù)天的時(shí)移,索引量將會(huì)是個(gè)巨額數(shù)字,并明顯影響請(qǐng)求速,因此,HLS協(xié)議對(duì)存儲(chǔ)I/O要求相當(dāng)苛刻。
RTMP協(xié)議全稱為實(shí)時(shí)消息傳輸協(xié)議。此協(xié)議基于TCP,是一個(gè)協(xié)議族。RTMP本身為一種實(shí)現(xiàn)通信的網(wǎng)絡(luò)協(xié)議,一般用在Flash/AIR平臺(tái)以及支持RTMP協(xié)議的交互服務(wù)器或是流媒體服務(wù)器間完成數(shù)據(jù)的通信以及音、視頻數(shù)據(jù)的轉(zhuǎn)換。
新型點(diǎn)播服務(wù)器系統(tǒng),獨(dú)創(chuàng)了內(nèi)存緩存數(shù)據(jù)實(shí)時(shí)切片技術(shù),從根本上解決了大量切片的碎片問(wèn)題,使得單臺(tái)服務(wù)器的切片與打包能力不再是瓶頸。其基本原理如下:將TS切片文件存到內(nèi)存當(dāng)中,這種技術(shù)使得服務(wù)器的磁盤(pán)上面不再會(huì)有“數(shù)以噸計(jì)”的文件碎片,極大減少了磁盤(pán)的I/O次數(shù),延長(zhǎng)了服務(wù)器磁盤(pán)的使用壽命,極大提高了服務(wù)器運(yùn)行的穩(wěn)定性。
3 ffmpeg的安裝使用以及推流過(guò)程
3.1 ffmpeg的安裝
3.1.1 首先安裝lame
./configure--prefix=/usr--mandir=/usr/share/man --with-gtk-prefix=/usr &&
make &&
make install
3.1.2 安裝ffmpeg
./configure --prefix=/usr/local --enable-memalign-hack --enable-libmp3lame --enable-shared --disable-yasm
make
make install
3.2 ffmpeg推流過(guò)程
進(jìn)入人才交流網(wǎng)頁(yè)面,上傳直播數(shù)據(jù)源。推流客服端首先打開(kāi)電腦攝像頭,如主播介紹人才的需求視頻,現(xiàn)場(chǎng)講說(shuō),在此選擇頻道號(hào),和推流時(shí)間,上傳視頻數(shù)據(jù),后臺(tái)便開(kāi)始推流。
接著,在后臺(tái)服務(wù)器上的ffmpeg便開(kāi)始工作了。在Linux系統(tǒng)上,ffmpeg比較適合支持V4L2的視頻設(shè)備,通過(guò)登錄服務(wù)器后臺(tái)運(yùn)行的腳步程序及運(yùn)行情況如下:可見(jiàn)數(shù)據(jù)正在往推流服務(wù)器上上傳??头瞬捎胒fmpeg推流時(shí),為了避免黑客入侵或是其他攻擊,以及限制非注冊(cè)本課題設(shè)計(jì)的人才招聘網(wǎng)站的直播用戶,特設(shè)置了refer黑白名單,允許特定的url可以通過(guò)refer頭部傳遞來(lái)控制訪問(wèn)。
4 總結(jié)
本課題的基于人才交流網(wǎng)的視頻直播系統(tǒng)的實(shí)現(xiàn),采用分層結(jié)構(gòu)化的方案完成此課題的設(shè)計(jì),便于數(shù)據(jù)與指令的轉(zhuǎn)發(fā)分離開(kāi)來(lái),成功的避免因網(wǎng)絡(luò)復(fù)雜情況下數(shù)據(jù)隨意性的轉(zhuǎn)發(fā),并且可以降低數(shù)據(jù)冗余、提高數(shù)據(jù)的傳輸效率。雖然,流媒體轉(zhuǎn)碼在理論層面上有一定的理解,但其實(shí)際表現(xiàn)如添加水印轉(zhuǎn)碼平臺(tái)是怎么實(shí)現(xiàn),在直播數(shù)據(jù)源轉(zhuǎn)碼的時(shí)怎樣藍(lán)關(guān)。保存索引的Mysql數(shù)據(jù)庫(kù)怎么實(shí)現(xiàn)容災(zāi),以及負(fù)載均衡等,同時(shí)關(guān)于處理系統(tǒng)的瓶頸以及系統(tǒng)安全方面的知識(shí)相對(duì)薄弱,這些都是以后的科研或工作中需要進(jìn)一步研究的地方。
參考文獻(xiàn)
[1]STOICA I,MORRIS R,KARGER D,et al.Chord:A Scalable Peer-to-peer Lookup Service for Internet Applications[J].Computer Communication Review,2001,31(4):149-160.
[2]TANG Y,LUO J,ZHANG Q,et al.Deploying P2P Networks for Large-Scale Live Video-Stre aming Service[J].IEEE Communications Magazine,2007,45(6):100-106.
[3]張紅兵,陳永健.一種基于數(shù)據(jù)庫(kù)的數(shù)據(jù)廣播系統(tǒng)的實(shí)現(xiàn)與性能分析[J].電視技術(shù),2004,(1):36-38.
(作者單位:國(guó)網(wǎng)湖南省電力公司新田縣供電分公司)