999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于SRS的開源直播系統的設計與實現

2016-04-12 00:00:00胡國強周兆永信朝霞
現代電子技術 2016年16期

摘 要: 針對校內直播系統存在并發性能低下的問題,提出一種基于SRS開源軟件的校內直播解決方案。首先在CentOS的環境下部署Nginx和PHP,然后利用開源RTMP架構SRS結合開源編解碼庫FFmpeg實現視頻直播播放。Windows操作系統用戶安裝Flash插件進行播放和回放,移動端用戶通過HTTP方式進行播放和回放。實驗結果表明,該方案有極高的穩定性和實時性,并發性能高,視頻具有很好的質量。

關鍵詞: SRS; 開源軟件; 直播系統; 直播方案

中圖分類號: TN919.8?34; TP37 文獻標識碼: A 文章編號: 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 引 言

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

1 直播系統設計方案

1.1 開源軟件和協議介紹

1.1.1 RTMP協議和RTSP協議

RTMP(Real Time Messaging Protocol)實時消息傳輸協議是用來進行實時數據通信的網絡協議[1],主要用在Flash/AIR平臺音視頻和數據通信。RTMP協議使用TCP協議作為其傳輸層的網絡協議,由于TCP可提供可靠交付的協議,因此在互聯網上傳輸時不會出現丟包情況,從而保證了用戶體驗[1]。

RTSP(Real Time Streaming Protocol)實時流協議是應用層控制協議[2],控制實時數據的發送。RTSP只對流媒體的數據傳輸起控制作用,傳輸數據一般由RTP協議類實現。采用RTSP + RTP這個組合來傳輸多媒體數據,在互聯網應用不是很多,原因在于RTP協議使用傳輸數據極易丟包的UDP協議作為其傳輸層的網絡協議。多媒體數據對丟包、時延、抖動有很高的要求,一點點小問題就會極大地影響用戶的體驗質量[3]。

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

1.1.2 FFmpeg

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

1.1.3 CentOS下的Nginx+PHP

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

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

1.1.4 FlowPlayer

FlowPlayer是能將播放器內嵌到網頁的開源播放器,用戶可以自由定制播放器并配制播放器相關參數以達到想要的播放效果[8]。FlowPlayer功能豐富,能夠非常流暢的播放視頻文件,支持自定義配置和擴展,還能支持HTTP以及流媒體傳輸。

1.2 直播系統方案整體架構

該系統分為服務端和客戶端,其中客戶端分為Windows客戶端和移動終端(安卓系統移動終端和蘋果IOS移動終端)。我校采用普通高清攝像機采集圖像信息,通過話筒采集音頻信息。攝像機輸出的數據通過HDMI采集卡的高清接口傳數據到采集推流服務器上,圖像編碼采用H264編碼方式,音頻編碼采用AAC編碼方式。在采集推流服務器上通過FFmpeg將圖像和音頻封裝成RTMP協議流后通過校園網推送到SRS流媒體服務器。流媒體服務器通過校園網絡將RTMP數據流傳輸到PC和移動終端。校園內無線信號差的地方,流媒體服務器可以通過3G/4G網絡傳輸RTMP數據流直接到移動終端。直播系統結構如圖1所示。

2 直播系統模塊的設計

2.1 視頻的采集

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

2.2 RTMP流的推送

在Linux平臺上,FFmpeg對V4L2的視頻設備提供了很好的支持,本文用FFmpeg做推流器。推流器的作用就是將本地的視頻數據推送到流媒體服務器。本文用FFmpeg將HDMI接口采集到的圖像數據和音頻數據通過流媒體協議RTMP以直播流的形式推送出去。RTMP采用的封裝格式是FLV,因此在指定輸出流媒體的時候需要指定其封裝格式為FLV。發送流媒體數據時要注意延時,否則FFmepg會瞬間發送大量數據,導致流媒體服務器癱瘓。本文在文獻[9]的基礎上改進了推送流程,如圖2所示。

2.3 SRS開源流媒體服務器

SRS流媒體服務器負責轉發和存儲流媒體,本文采用Nginx+PHP發布和管理視頻信息。SRS流媒體服務器將接收到的實時視頻存在dvr目錄的live文件夾下,最終生成FLV格式的視頻文件。接收到的實時流文件放在live目錄的live文件下。

(1) PHP和Nginx關聯或整合:

(2) 關聯后在Nginx/HTML下編寫index.PHP視頻播放網頁。將播放器FlowPlayer內嵌到播放網頁中,方便用戶通過網頁收看。為了更好地支持移動終端用戶觀看直播,本文在SRS配置了HLS分發:

hls {

enabled on;

hls_path /home/SRS/live;

hls_fragment 5;

hls_window 300;

}

(3) 下載并安裝開源軟件SRS,安裝后進行配置。服務器工作流程如圖3所示。

圖3 服務器工作流程圖

2.4 視頻的接收和播放

Windows客戶端首先通過HTTP get向Nginx服務器發送播放請求,Nginx服務器收到請求后下發直播地址給Windows客戶端,Windows客戶端通過Flash播放器接收直播流后直接播放。SRS配置好的HLS提供了一個M3U8列表。移動端首先通過HTTP get向Nginx服務器請求播放,Nginx服務器收到請求后下發訪問M3U8列表播放地址給移動端,移動端用前端網頁上的HTML5播放器進行直播節目的收看。

2.5 實驗與分析

根據上述方案,開發了視頻基于SRS的直播系統,該系統完全能承擔現場直播任務,用戶通過Windows終端和移動終端均可觀看直播視頻。本文對搭建的SRS直播服務器和原來用的Nginx?rtmp直播服務器的性能進行測試,SRS為單進程,Nginx?rtmp支持多進程,為了對比Nginx?rtmp也開啟一個進程。

硬件環境:系統為CentOS release 6.2(Final);CPU為AMD Opteron(tm) Processor 6376;內存為8 GB。

本次實驗使用云平臺劃分的2臺硬件配置相同的虛擬機,客戶端和服務器都運行于1臺機器,避開網絡瓶頸。用root登錄后用命令ulimit?n65535設置最大連接數,測試過程如下:

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

(2) 用搭建好的SRS服務器,確保連接數沒有限制。

(3) 將FFmpeg推流軟件分別安裝在兩臺搭建好的直播服務器后啟動FFmpeg循環推流,并在客戶端觀看。

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

(5) 開始啟動st?load模擬客戶端并發測試SRS服務器和Nginx?rtmp服務器的性能。

啟動1 000客戶端:./objs/st_rtmp_load ?c 1000 ?r rtmp://127.0.0.1:19350/live/livestream >/dev/1

客戶端開始播放30 s以上,并記錄數據。期望帶寬:測試碼率乘以并發數。實際帶寬:指服務器實際的吞吐率。客戶端延遲:直播播放器的緩沖區設置為0.8 s。分別啟動 1 000,2 000,3 000,4 000,5 000,6 000,7 000,

8 000客戶端,記錄Nginx?rtmp和SRS的各項資源使用指標,測試性能對比如表1所示。

通過對測試數據的分析發現,在相同的連接數下,SRS直播服務器比Nginx?rtmp直播系統服務器消耗的資源要低,但實際占用帶寬有所增加。

3 結 語

本文通過組成的系統架構闡述了一個新的基于SRS的直播系統解決方案。詳細分析了各個模塊,設計并搭建了整套直播系統。同時,通過跟Nginx?rtmp架構的直播系統在性能方面對比測試,驗證了基于SRS的直播系統的高并發性和穩定性,為實現高可靠性和高并發性的視頻直播系統提供了新的可行的方法。

參考文獻

[1] 雷霄驊,姜秀華,王彩虹.基于RTMP協議的流媒體技術的原理與應用[J].中國傳媒大學學報(自然科學版),2013,20(6):59?64.

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

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

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

[5] 劉大紅.基于RTSP流媒體服務器的設計與實現[D].西安:西安電子科技大學,2013.

[6] 劉全飛,周相兵.基于Nginx的站點管理系統設計與實現[J].電腦開發與應用,2015,28(1):8?10.

[7] 康舜禹,姜春風,劉松,等.“陽光下”服務交流平臺的開發與實現[J].吉林農業科技學院學報,2014,23(3):38?40.

[8] 魯寅輝.基于開源軟件的校園網絡視頻平臺設計與實現[J].華東師范大學學報(自然科學版),2015(z1):191?196.

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

主站蜘蛛池模板: 成年人国产网站| 免费国产高清精品一区在线| 日本成人福利视频| 精品国产成人高清在线| 啊嗯不日本网站| AV在线天堂进入| 亚洲有无码中文网| 欧洲在线免费视频| 狠狠ⅴ日韩v欧美v天堂| 亚洲日韩精品欧美中文字幕| 亚洲三级视频在线观看| 国产裸舞福利在线视频合集| 免费不卡在线观看av| 国产精品毛片一区| 国产精品手机视频| 2020极品精品国产 | 久久综合色播五月男人的天堂| 国产91丝袜在线播放动漫| 日本伊人色综合网| 精品久久综合1区2区3区激情| 中文天堂在线视频| 99免费在线观看视频| 免费观看欧美性一级| 一级一级特黄女人精品毛片| 国产综合亚洲欧洲区精品无码| 国产色婷婷| 亚洲天堂视频在线观看| 国产人碰人摸人爱免费视频 | 日韩123欧美字幕| 免费99精品国产自在现线| 亚洲无码A视频在线| 麻豆AV网站免费进入| 免费国产小视频在线观看| 久久永久视频| 欧美激情网址| 99999久久久久久亚洲| 中文字幕首页系列人妻| 欧美日韩免费在线视频| 99青青青精品视频在线| 亚洲AV无码乱码在线观看代蜜桃| 91在线中文| 亚洲成人www| 免费av一区二区三区在线| 国产91色在线| a级免费视频| 免费看av在线网站网址| 毛片网站在线播放| 在线观看国产精美视频| 国产超碰一区二区三区| 第九色区aⅴ天堂久久香| 一级高清毛片免费a级高清毛片| 亚洲精品你懂的| 免费无码一区二区| 一级毛片基地| 国产欧美日韩在线一区| 99久久精品视香蕉蕉| 国产精品综合久久久 | 欧美亚洲中文精品三区| h视频在线播放| 欧美专区日韩专区| 狠狠色噜噜狠狠狠狠色综合久 | 精品伊人久久久久7777人| 国产丝袜无码精品| 毛片网站免费在线观看| 亚洲精品无码在线播放网站| 亚洲va视频| 国模极品一区二区三区| 黄色网页在线观看| 日韩欧美中文字幕在线精品| 一区二区三区四区精品视频 | 精品福利视频网| 97se综合| 国产美女精品一区二区| 草草线在成年免费视频2| 亚洲日本www| 1024你懂的国产精品| 久久久久久久久久国产精品| 国产精品视频久| 91精品情国产情侣高潮对白蜜| 国产欧美日韩综合在线第一| 欧美人与牲动交a欧美精品| www.精品国产|