• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于SRS的開(kāi)源直播系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

      2016-04-12 00:00:00胡國(guó)強(qiáng)周兆永信朝霞
      現(xiàn)代電子技術(shù) 2016年16期

      摘 要: 針對(duì)校內(nèi)直播系統(tǒng)存在并發(fā)性能低下的問(wèn)題,提出一種基于SRS開(kāi)源軟件的校內(nèi)直播解決方案。首先在CentOS的環(huán)境下部署Nginx和PHP,然后利用開(kāi)源RTMP架構(gòu)SRS結(jié)合開(kāi)源編解碼庫(kù)FFmpeg實(shí)現(xiàn)視頻直播播放。Windows操作系統(tǒng)用戶(hù)安裝Flash插件進(jìn)行播放和回放,移動(dòng)端用戶(hù)通過(guò)HTTP方式進(jìn)行播放和回放。實(shí)驗(yàn)結(jié)果表明,該方案有極高的穩(wěn)定性和實(shí)時(shí)性,并發(fā)性能高,視頻具有很好的質(zhì)量。

      關(guān)鍵詞: SRS; 開(kāi)源軟件; 直播系統(tǒng); 直播方案

      中圖分類(lèi)號(hào): TN919.8?34; TP37 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2016)16?0036?04

      Abstract: Aiming at the poor concurrency performance existing in the campus live system, a solution about the campus live system based on SRS open source software is provided. First of all, Nginx and PHP is deployed under the environment of CentOS, and then open source RTMP architecture SRS combining with the open source codec library FFmpeg is adopted to realize video live broadcast. The users of Windows operating system can install Flash plug?in to perform their play and playback. The users of mobile terminal perform their play and playback via HTTP. The experimental results show that the solution can realize high stability, real?time performance, high concurrent performance and high quality video.

      Keywords: SRS; open source software; live system; live scheme

      0 引 言

      近年來(lái),隨著網(wǎng)絡(luò)技術(shù)和光纖技術(shù)在校園網(wǎng)的廣泛應(yīng)用,網(wǎng)絡(luò)直播逐漸成為師生獲取信息的重要手段。校內(nèi)的許多活動(dòng)都可以借助網(wǎng)上現(xiàn)場(chǎng)直播方式傳遍全世界。西北農(nóng)林科技大學(xué)在發(fā)展過(guò)程中不斷跟進(jìn)現(xiàn)代教育技術(shù)的步伐,注重教學(xué)資源的積累和應(yīng)用。學(xué)校多年來(lái)積累了豐富的校內(nèi)資源、精品課程、國(guó)外資源等,這些珍貴的資源運(yùn)用于教學(xué)過(guò)程中會(huì)對(duì)老師的教學(xué)和學(xué)生的學(xué)習(xí)有極大的幫助。隨著技術(shù)的進(jìn)步和知識(shí)的更新,師生對(duì)于教學(xué)現(xiàn)場(chǎng)實(shí)況及電視節(jié)目等實(shí)時(shí)教學(xué)資源的需求越來(lái)越多。隨著3G,4G移動(dòng)互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的師生希望通過(guò)移動(dòng)終端實(shí)時(shí)訪問(wèn)校內(nèi)直播系統(tǒng)以滿足現(xiàn)代教學(xué)的需求。面對(duì)日益增長(zhǎng)的用戶(hù)群,我校原有的直播系統(tǒng)已滿足不了師生利用多終端流暢觀看直播的需求。本文提出了基于SRS,F(xiàn)Fmpeg,Nginx,PHP等開(kāi)源軟件搭建的校內(nèi)直播系統(tǒng)方案,用多媒體數(shù)字視頻資源來(lái)輔助高校網(wǎng)絡(luò)教學(xué),以推動(dòng)校園信息化建設(shè)。本系統(tǒng)采用開(kāi)源軟件FFmpeg推流到SRS流媒體服務(wù)器對(duì)實(shí)時(shí)視頻流進(jìn)行處理,實(shí)現(xiàn)視頻的直播。本文首先分析了FFmpeg庫(kù)、RTMP流媒體協(xié)議和SRS的基本原理,然后設(shè)計(jì)并實(shí)現(xiàn)了整個(gè)視頻直播系統(tǒng)的各個(gè)功能模塊,最后在實(shí)際測(cè)試環(huán)境中驗(yàn)證了基于SRS校園開(kāi)源直播系統(tǒng)的高并發(fā)性和穩(wěn)定性。

      1 直播系統(tǒng)設(shè)計(jì)方案

      1.1 開(kāi)源軟件和協(xié)議介紹

      1.1.1 RTMP協(xié)議和RTSP協(xié)議

      RTMP(Real Time Messaging Protocol)實(shí)時(shí)消息傳輸協(xié)議是用來(lái)進(jìn)行實(shí)時(shí)數(shù)據(jù)通信的網(wǎng)絡(luò)協(xié)議[1],主要用在Flash/AIR平臺(tái)音視頻和數(shù)據(jù)通信。RTMP協(xié)議使用TCP協(xié)議作為其傳輸層的網(wǎng)絡(luò)協(xié)議,由于TCP可提供可靠交付的協(xié)議,因此在互聯(lián)網(wǎng)上傳輸時(shí)不會(huì)出現(xiàn)丟包情況,從而保證了用戶(hù)體驗(yàn)[1]。

      RTSP(Real Time Streaming Protocol)實(shí)時(shí)流協(xié)議是應(yīng)用層控制協(xié)議[2],控制實(shí)時(shí)數(shù)據(jù)的發(fā)送。RTSP只對(duì)流媒體的數(shù)據(jù)傳輸起控制作用,傳輸數(shù)據(jù)一般由RTP協(xié)議類(lèi)實(shí)現(xiàn)。采用RTSP + RTP這個(gè)組合來(lái)傳輸多媒體數(shù)據(jù),在互聯(lián)網(wǎng)應(yīng)用不是很多,原因在于RTP協(xié)議使用傳輸數(shù)據(jù)極易丟包的UDP協(xié)議作為其傳輸層的網(wǎng)絡(luò)協(xié)議。多媒體數(shù)據(jù)對(duì)丟包、時(shí)延、抖動(dòng)有很高的要求,一點(diǎn)點(diǎn)小問(wèn)題就會(huì)極大地影響用戶(hù)的體驗(yàn)質(zhì)量[3]。

      SRS(Simple Rtmp Server)是MIT協(xié)議的開(kāi)源流媒體服務(wù)器項(xiàng)目。項(xiàng)目由觀止創(chuàng)想公司CTO—winlin(楊成立)發(fā)起并維護(hù)[4],SRS的定位是運(yùn)營(yíng)級(jí)的互聯(lián)網(wǎng)直播服務(wù)器集群,追求更好的概念完整性和最簡(jiǎn)單實(shí)現(xiàn)的代碼。選擇搭建基于RTMP/HLS直播服務(wù)器主要因?yàn)槠浜?jiǎn)單高效,SRS單進(jìn)程能支持9 000并發(fā),Nginx?rtmp單進(jìn)程最多支持3 000并發(fā),單進(jìn)程的性能SRS是Nginx?rtmp的3倍。另外SRS在處理和管理HTTP流、RTMP流或者HLS流時(shí)也非常高效。

      1.1.2 FFmpeg

      FFmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案,包含了非常先進(jìn)的音頻/視頻編解碼庫(kù)Libavcodec。多媒體視頻處理工具FFmpeg有非常強(qiáng)大的功能,包括視頻采集功能、視頻格式轉(zhuǎn)換、視頻抓圖、給視頻加水印等[5]。目前普通攝像機(jī)輸入流是RTSP流或MMS流,如果流媒體服務(wù)器接收的是RTMP流,就需要用FFmpeg進(jìn)行視頻轉(zhuǎn)換。FFmpeg在Linux平臺(tái)下開(kāi)發(fā),但它也可以在Windows,Mac OS X操作系統(tǒng)下編譯運(yùn)行,有良好的可移植性。

      1.1.3 CentOS下的Nginx+PHP

      Nginx (\"engine x\") 是一個(gè)高性能的HTTP和反向代理服務(wù)器,也有郵件代理服務(wù)器的功能。Nginx基于開(kāi)源框架,能夠很好地解決高連接并發(fā)問(wèn)題,能支持高達(dá)5萬(wàn)個(gè)并發(fā)連接數(shù)的響應(yīng),并且同時(shí)占用內(nèi)存和CPU資源消耗也低[6]。在高連接并發(fā)的環(huán)境下,Nginx是Apache服務(wù)器不錯(cuò)的替代品。

      PHP(Hypertext Preprocessor)是一種通用開(kāi)源腳本語(yǔ)言。語(yǔ)法吸收了C語(yǔ)言、Java和Perl的特點(diǎn),主要適用于Web開(kāi)發(fā)領(lǐng)域。PHP語(yǔ)法混合了C,Java,Perl以及PHP自創(chuàng)的語(yǔ)法獨(dú)成一體,其比CGI或者Perl能更快速地執(zhí)行動(dòng)態(tài)網(wǎng)頁(yè)。用PHP做出的動(dòng)態(tài)頁(yè)面與其他的編程語(yǔ)言做出的動(dòng)態(tài)頁(yè)面相比,PHP是將程序嵌入到HTML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)文檔中去執(zhí)行,執(zhí)行效率比完全生成HTML標(biāo)記的CGI要高許多[7];PHP還可以執(zhí)行編譯代碼,通過(guò)編譯可以加密和優(yōu)化代碼運(yùn)行,加快代碼運(yùn)行。PHP和Nginx的整合是通過(guò)PHP?FastCGI 來(lái)完成的。FastCGI 是一個(gè)可伸縮、高速的在web Server和腳本語(yǔ)言間通信的接口。其被許多腳本語(yǔ)言所支持,包括PHP以及多數(shù)流行的Web Server。

      1.1.4 FlowPlayer

      FlowPlayer是能將播放器內(nèi)嵌到網(wǎng)頁(yè)的開(kāi)源播放器,用戶(hù)可以自由定制播放器并配制播放器相關(guān)參數(shù)以達(dá)到想要的播放效果[8]。FlowPlayer功能豐富,能夠非常流暢的播放視頻文件,支持自定義配置和擴(kuò)展,還能支持HTTP以及流媒體傳輸。

      1.2 直播系統(tǒng)方案整體架構(gòu)

      該系統(tǒng)分為服務(wù)端和客戶(hù)端,其中客戶(hù)端分為Windows客戶(hù)端和移動(dòng)終端(安卓系統(tǒng)移動(dòng)終端和蘋(píng)果IOS移動(dòng)終端)。我校采用普通高清攝像機(jī)采集圖像信息,通過(guò)話筒采集音頻信息。攝像機(jī)輸出的數(shù)據(jù)通過(guò)HDMI采集卡的高清接口傳數(shù)據(jù)到采集推流服務(wù)器上,圖像編碼采用H264編碼方式,音頻編碼采用AAC編碼方式。在采集推流服務(wù)器上通過(guò)FFmpeg將圖像和音頻封裝成RTMP協(xié)議流后通過(guò)校園網(wǎng)推送到SRS流媒體服務(wù)器。流媒體服務(wù)器通過(guò)校園網(wǎng)絡(luò)將RTMP數(shù)據(jù)流傳輸?shù)絇C和移動(dòng)終端。校園內(nèi)無(wú)線信號(hào)差的地方,流媒體服務(wù)器可以通過(guò)3G/4G網(wǎng)絡(luò)傳輸RTMP數(shù)據(jù)流直接到移動(dòng)終端。直播系統(tǒng)結(jié)構(gòu)如圖1所示。

      2 直播系統(tǒng)模塊的設(shè)計(jì)

      2.1 視頻的采集

      采集(Ingest)指的是將文件(FLV,MP4,MKV,AVI,RMVB等),流(RTMP,RTMPT,RTMPS,RTSP,HTTP,HLS等),設(shè)備等數(shù)據(jù),轉(zhuǎn)封裝為RTMP流(若編碼不是H264/AAC,則需要轉(zhuǎn)碼),推送到SRS。首先在直播用的服務(wù)器上安裝好HDMI采集卡的驅(qū)動(dòng),然后將高清攝像機(jī)與直播用的電腦通過(guò)HDMI采集卡的HDMI接口相連。通過(guò)直播電腦的HDMI采集卡采集攝像機(jī)的視頻流和音頻流并將采集到的數(shù)據(jù)保存在內(nèi)存緩沖區(qū)ByteBuffer中以便FFmpeg進(jìn)行編碼。

      2.2 RTMP流的推送

      在Linux平臺(tái)上,F(xiàn)Fmpeg對(duì)V4L2的視頻設(shè)備提供了很好的支持,本文用FFmpeg做推流器。推流器的作用就是將本地的視頻數(shù)據(jù)推送到流媒體服務(wù)器。本文用FFmpeg將HDMI接口采集到的圖像數(shù)據(jù)和音頻數(shù)據(jù)通過(guò)流媒體協(xié)議RTMP以直播流的形式推送出去。RTMP采用的封裝格式是FLV,因此在指定輸出流媒體的時(shí)候需要指定其封裝格式為FLV。發(fā)送流媒體數(shù)據(jù)時(shí)要注意延時(shí),否則FFmepg會(huì)瞬間發(fā)送大量數(shù)據(jù),導(dǎo)致流媒體服務(wù)器癱瘓。本文在文獻(xiàn)[9]的基礎(chǔ)上改進(jìn)了推送流程,如圖2所示。

      2.3 SRS開(kāi)源流媒體服務(wù)器

      SRS流媒體服務(wù)器負(fù)責(zé)轉(zhuǎn)發(fā)和存儲(chǔ)流媒體,本文采用Nginx+PHP發(fā)布和管理視頻信息。SRS流媒體服務(wù)器將接收到的實(shí)時(shí)視頻存在dvr目錄的live文件夾下,最終生成FLV格式的視頻文件。接收到的實(shí)時(shí)流文件放在live目錄的live文件下。

      (1) PHP和Nginx關(guān)聯(lián)或整合:

      (2) 關(guān)聯(lián)后在Nginx/HTML下編寫(xiě)index.PHP視頻播放網(wǎng)頁(yè)。將播放器FlowPlayer內(nèi)嵌到播放網(wǎng)頁(yè)中,方便用戶(hù)通過(guò)網(wǎng)頁(yè)收看。為了更好地支持移動(dòng)終端用戶(hù)觀看直播,本文在SRS配置了HLS分發(fā):

      hls {

      enabled on;

      hls_path /home/SRS/live;

      hls_fragment 5;

      hls_window 300;

      }

      (3) 下載并安裝開(kāi)源軟件SRS,安裝后進(jìn)行配置。服務(wù)器工作流程如圖3所示。

      圖3 服務(wù)器工作流程圖

      2.4 視頻的接收和播放

      Windows客戶(hù)端首先通過(guò)HTTP get向Nginx服務(wù)器發(fā)送播放請(qǐng)求,Nginx服務(wù)器收到請(qǐng)求后下發(fā)直播地址給Windows客戶(hù)端,Windows客戶(hù)端通過(guò)Flash播放器接收直播流后直接播放。SRS配置好的HLS提供了一個(gè)M3U8列表。移動(dòng)端首先通過(guò)HTTP get向Nginx服務(wù)器請(qǐng)求播放,Nginx服務(wù)器收到請(qǐng)求后下發(fā)訪問(wèn)M3U8列表播放地址給移動(dòng)端,移動(dòng)端用前端網(wǎng)頁(yè)上的HTML5播放器進(jìn)行直播節(jié)目的收看。

      2.5 實(shí)驗(yàn)與分析

      根據(jù)上述方案,開(kāi)發(fā)了視頻基于SRS的直播系統(tǒng),該系統(tǒng)完全能承擔(dān)現(xiàn)場(chǎng)直播任務(wù),用戶(hù)通過(guò)Windows終端和移動(dòng)終端均可觀看直播視頻。本文對(duì)搭建的SRS直播服務(wù)器和原來(lái)用的Nginx?rtmp直播服務(wù)器的性能進(jìn)行測(cè)試,SRS為單進(jìn)程,Nginx?rtmp支持多進(jìn)程,為了對(duì)比Nginx?rtmp也開(kāi)啟一個(gè)進(jìn)程。

      硬件環(huán)境:系統(tǒng)為CentOS release 6.2(Final);CPU為AMD Opteron(tm) Processor 6376;內(nèi)存為8 GB。

      本次實(shí)驗(yàn)使用云平臺(tái)劃分的2臺(tái)硬件配置相同的虛擬機(jī),客戶(hù)端和服務(wù)器都運(yùn)行于1臺(tái)機(jī)器,避開(kāi)網(wǎng)絡(luò)瓶頸。用root登錄后用命令ulimit?n65535設(shè)置最大連接數(shù),測(cè)試過(guò)程如下:

      (1) 配置原有的Nginx?rtmp服務(wù)器,確保連接數(shù)沒(méi)有限制:

      (2) 用搭建好的SRS服務(wù)器,確保連接數(shù)沒(méi)有限制。

      (3) 將FFmpeg推流軟件分別安裝在兩臺(tái)搭建好的直播服務(wù)器后啟動(dòng)FFmpeg循環(huán)推流,并在客戶(hù)端觀看。

      (4) 使用Linux工具模擬RTMP客戶(hù)端訪問(wèn), st_rtmp_load為RTMP流負(fù)載測(cè)試工具,單個(gè)進(jìn)程可以模擬1 000~3 000個(gè)客戶(hù)端。為了避免服務(wù)器過(guò)高負(fù)載,一個(gè)進(jìn)程模擬1 000個(gè)客戶(hù)端。編譯:./configure make。啟動(dòng)參數(shù):./objs/st_rtmp_load ?c 1000 ?r 。

      (5) 開(kāi)始啟動(dòng)st?load模擬客戶(hù)端并發(fā)測(cè)試SRS服務(wù)器和Nginx?rtmp服務(wù)器的性能。

      啟動(dòng)1 000客戶(hù)端:./objs/st_rtmp_load ?c 1000 ?r rtmp://127.0.0.1:19350/live/livestream >/dev/1

      客戶(hù)端開(kāi)始播放30 s以上,并記錄數(shù)據(jù)。期望帶寬:測(cè)試碼率乘以并發(fā)數(shù)。實(shí)際帶寬:指服務(wù)器實(shí)際的吞吐率??蛻?hù)端延遲:直播播放器的緩沖區(qū)設(shè)置為0.8 s。分別啟動(dòng) 1 000,2 000,3 000,4 000,5 000,6 000,7 000,

      8 000客戶(hù)端,記錄Nginx?rtmp和SRS的各項(xiàng)資源使用指標(biāo),測(cè)試性能對(duì)比如表1所示。

      通過(guò)對(duì)測(cè)試數(shù)據(jù)的分析發(fā)現(xiàn),在相同的連接數(shù)下,SRS直播服務(wù)器比Nginx?rtmp直播系統(tǒng)服務(wù)器消耗的資源要低,但實(shí)際占用帶寬有所增加。

      3 結(jié) 語(yǔ)

      本文通過(guò)組成的系統(tǒng)架構(gòu)闡述了一個(gè)新的基于SRS的直播系統(tǒng)解決方案。詳細(xì)分析了各個(gè)模塊,設(shè)計(jì)并搭建了整套直播系統(tǒng)。同時(shí),通過(guò)跟Nginx?rtmp架構(gòu)的直播系統(tǒng)在性能方面對(duì)比測(cè)試,驗(yàn)證了基于SRS的直播系統(tǒng)的高并發(fā)性和穩(wěn)定性,為實(shí)現(xiàn)高可靠性和高并發(fā)性的視頻直播系統(tǒng)提供了新的可行的方法。

      參考文獻(xiàn)

      [1] 雷霄驊,姜秀華,王彩虹.基于RTMP協(xié)議的流媒體技術(shù)的原理與應(yīng)用[J].中國(guó)傳媒大學(xué)學(xué)報(bào)(自然科學(xué)版),2013,20(6):59?64.

      [2] 劉英德.基于單片機(jī)的3G流媒體監(jiān)控技術(shù)[J].煤炭技術(shù),2012,31(4):176?177.

      [3] 蘇佳,姜秀華.IPTV視頻質(zhì)量評(píng)估介紹[J].電視技術(shù),2011,35(6):78?81.

      [4] Media Center.萬(wàn)眾矚目的SRS到底是個(gè)什么球[EB/OL]. [2015?10?01].http://www.chnvideo.com/blog?classic?srs.html.

      [5] 劉大紅.基于RTSP流媒體服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2013.

      [6] 劉全飛,周相兵.基于Nginx的站點(diǎn)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電腦開(kāi)發(fā)與應(yīng)用,2015,28(1):8?10.

      [7] 康舜禹,姜春風(fēng),劉松,等.“陽(yáng)光下”服務(wù)交流平臺(tái)的開(kāi)發(fā)與實(shí)現(xiàn)[J].吉林農(nóng)業(yè)科技學(xué)院學(xué)報(bào),2014,23(3):38?40.

      [8] 魯寅輝.基于開(kāi)源軟件的校園網(wǎng)絡(luò)視頻平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[J].華東師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2015(z1):191?196.

      [9] 雷霄驊.最簡(jiǎn)單的基于FFmpeg的推流器[EB/OL]. [2015?10?01].http://blog.csdn.net/leixiaohua1020/article/details/39803457.

      五河县| 梁平县| 旬邑县| 柞水县| 昆明市| 平遥县| 昌江| 黑山县| 通山县| 乡城县| 保康县| 冷水江市| 贺州市| 安阳县| 红河县| 西峡县| 沾化县| 天全县| 河源市| 五寨县| 汉中市| 乌兰浩特市| 阳谷县| 霍林郭勒市| 宁晋县| 玉环县| 措勤县| 东阳市| 滦平县| 兴和县| 奎屯市| 赤峰市| 衡阳县| 霍林郭勒市| 通河县| 瑞丽市| 临海市| 潼南县| 南郑县| 卢龙县| 辽宁省|