“SRS定位是運營級的互聯(lián)網(wǎng)直播服務(wù)器集群,追求更好的概念完整性和最簡單實現(xiàn)的代碼?!薄獁inlin
通讀了simple rtmp server的2.0release 版本的wiki。從整體上,對simple rtmp server有了比較全面的認(rèn)識,也根據(jù)wiki中的介紹,將simple rtmp server的一些demo跑通,體驗了一下SRS部署的簡單快速,但是由于手頭機器有限,并不能體會SRS的集群部署性能,比較遺憾。
Simple rtmp server,根據(jù)名稱就能夠知道,整個流媒體服務(wù)器的基礎(chǔ)就是Real Time Messageing Protocol(RTMP),這是一種設(shè)計用來進(jìn)行實時數(shù)據(jù)通訊的網(wǎng)絡(luò)協(xié)議,主要用來在Flash/AIR平臺和支持RTMP協(xié)議的流媒體/交互服務(wù)器之間,進(jìn)行音視頻數(shù)據(jù)通信。為了能夠支持IOS跟一些沒有Flash播放器的機器,SRS有增加了HLS跟HTTP-FLV支持。其中HLS,指的是http live streaming ,是Apple公司的動態(tài)碼率自適應(yīng)技術(shù),主要用于IOS,Mac OS X系統(tǒng)中。特色是擁有m3u8索引文件,然后將視頻源切成特定大小的ts切片?;旧?,SRS支持的流媒體協(xié)議就包括RTMP,HLS,HTTP-FLV。包括RTSP,RTMP變種協(xié)議等這些協(xié)議,在開源的SRS2.0Release版本中,還沒有支持。
SRS在支持三種協(xié)議的同時,也有著豐富的流媒體服務(wù)器所具備的功能,比如轉(zhuǎn)碼/轉(zhuǎn)封裝/采集,內(nèi)部提供實驗版本的http服務(wù)器,設(shè)置有內(nèi)存、CPU等分析日志功能,低延遲屬性設(shè)置功能,還能夠?qū)崿F(xiàn)與CDN對接,具備部署成RTMP分發(fā)集群或者HTTP-FLV分發(fā)集群的能力,還設(shè)立有vhost,可以在一個集群中支持多用戶操作,并且,SRS還支持在不中斷服務(wù)的情況下應(yīng)用新的配置。
說了那么多,都是紙上談兵,沒有什么卵用,所以,我利用元旦這兩天假期,搭建了一個直播平臺。平臺具有以下功能:
1、 支持RTMP/HLS/HTTP-FLV
2、 支持轉(zhuǎn)碼,提供1080P,720P,D1和原始視頻源這四種模式流
3、 支持RTMP分發(fā)集群
4、 支持將不同種類的流拉到srs中作為rtmp流分發(fā)
主流詳細(xì)的配置文件
1、 布置最基本的RTMP服務(wù)器
listen 1935; #設(shè)置主流監(jiān)聽端口 max_connections 1000; #設(shè)置最大鏈接數(shù)
2、 布置主流
pid ./objs/build.home.work.master.pid; # 設(shè)置主流PID文件 srs_log_file ./objs/build.home.work.master.log; # 設(shè)置主流log文件
3、 布置http server
http_server { enabled on; # 啟用http server,這里我并沒有使用srs中內(nèi)置的http server,而是采用nginx listen 8080; # 設(shè)定http監(jiān)聽端口 dir ./objs/nginx/html; # 設(shè)置nginx啟動的app目錄 }
4、 布置vhost
vhost __defaultVhost__
5、 布置hls服務(wù)器
hls{ enabled on; # 啟動hls服務(wù)器 hls_fragment 10; # 設(shè)置hls切片的最大數(shù)量 hls_window 60; # 設(shè)置hls切片的播放窗口時間限制 hls_path ./objs/nginx/html; # 設(shè)置使用hls的App的path,這里我使用了srs提供的app }
6、 布置HTTP-FLV服務(wù)器
http_remux { enabled on; # 啟動HTTP-FLV服務(wù)器 mount [vhost]/[app]/[stream].flv; # 設(shè)定掛靠的flv文件 hstrs on; #啟動hstrs }
7、 布置拉流
ingest ingest_livestream { #啟動拉流,這里只是一個嘗試 enabled on; #啟動額外的拉流 input{#設(shè)定拉流 type file;#設(shè)定拉流的類型 url ./doc/source.200kbps.768x320.flv; # 設(shè)定拉流的url } ffmpeg ./objs/ffmpeg/bin/ffmpeg; #啟動ffmpeg作為拉流的工具 engine { #將拉流綁定到主流監(jiān)聽 enabled on; output rtmp://127.0.0.01:[port]/live?vhost=[vhost]/ingest_livestream;#設(shè)置拉流的訪問地址 } }
8、 布置轉(zhuǎn)碼引擎
transcode { enabled on; # 開啟轉(zhuǎn)碼引擎 ffmpeg ./objs/ffmpeg/bin/ffmpeg; #設(shè)定轉(zhuǎn)碼工具為ffmpega. 1080P engine super_profile{ enabled on; # 開啟轉(zhuǎn)碼引擎 vfilter { } vcodec libx264; #設(shè)定video 的編碼工具 vbitrate 1024; # 設(shè)定碼率 vfps 20;# 設(shè)定幀率 vwidth 1920; # 設(shè)定圖像寬 vheight 1080; # 設(shè)定圖像高 vthreads 4; # 設(shè)定轉(zhuǎn)碼threads vprofile main; # 設(shè)置轉(zhuǎn)碼profile vpreset medium;# 設(shè)置轉(zhuǎn)碼質(zhì)量 vparams{ } acodec libfdk_aac; # 設(shè)定audio的編碼工具 abitrate 70; # 設(shè)定碼率 asample_rate 44100; # 設(shè)定采樣率 achannels 2; # 設(shè)定聲道 aparams { } output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];#綁定輸出 }b. 720P engine high_profile{ enabled on; # 開啟轉(zhuǎn)碼引擎 vfilter { } vcodec libx264; #設(shè)定video 的編碼工具 vbitrate 700; # 設(shè)定碼率 vfps 20;# 設(shè)定幀率 vwidth 1280; # 設(shè)定圖像寬 vheight 720; # 設(shè)定圖像高 vthreads 4; # 設(shè)定轉(zhuǎn)碼threads vprofile main; # 設(shè)置轉(zhuǎn)碼profile vpreset medium;# 設(shè)置轉(zhuǎn)碼質(zhì)量 vparams{ } acodec libfdk_aac; # 設(shè)定audio的編碼工具 abitrate 70; # 設(shè)定碼率 asample_rate 44100; # 設(shè)定采樣率 achannels 2; # 設(shè)定聲道 aparams { } output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];#綁定輸出 }c. D1 engine normal_profile{ enabled on; # 開啟轉(zhuǎn)碼引擎 vfilter { } vcodec libx264; #設(shè)定video 的編碼工具 vbitrate 500; # 設(shè)定碼率 vfps 20;# 設(shè)定幀率 vwidth 704; # 設(shè)定圖像寬 vheight 576; # 設(shè)定圖像高 vthreads 4; # 設(shè)定轉(zhuǎn)碼threads vprofile main; # 設(shè)置轉(zhuǎn)碼profile vpreset medium;# 設(shè)置轉(zhuǎn)碼質(zhì)量 vparams{ } acodec libfdk_aac; # 設(shè)定audio的編碼工具 abitrate 70; # 設(shè)定碼率 asample_rate 44100; # 設(shè)定采樣率 achannels 2; # 設(shè)定聲道 aparams { } output rtmp://127.0.0.1:[port]/[app]?vhost=[vhost]/[stream]_[engine];#綁定輸出 } 邊緣流配置,這里使用一個edge流作為例子
1、 基本RTMP服務(wù)器
listen 19350;#設(shè)定監(jiān)聽端口 max_connections 1000;# 設(shè)定最大鏈接數(shù)
2、 Edge配置
pid ./objs/build.home.work.slave.pid;# 設(shè)定PID文件 srs_log_file ./objs/build.home.work.slave.log;# 設(shè)定log文件
3、 Vhost
vhost __defaultVhost__
4、 設(shè)定主流
mode remote;# 設(shè)定為remote origin 127.0.0.1:1935; # 綁定主流的IP端口
5、 布置轉(zhuǎn)碼引擎,與主流的轉(zhuǎn)碼引擎一直,不再贅述,唯一不同的就是在訪問時,我們要訪問19350這個端口。
推流命令:ffmpeg -re -i 1.flv -vcodec copy -acodec copy -f flv -y rtmp://192.168.1.100/live/livestream
搭建完成后,對應(yīng)不同流的訪問地址(服務(wù)器地址為192.168.1.100):
主流:
1、 原始RTMP流:rtmp://192.168.1.100:1935/live/livestream
2、 1080P RTMP 流:rtmp://192.168.1.100:1935/live/livestream_super_profile
3、 720P RTMP流:rtmp://192.168.1.100:1935/live/livestream_high_profile
4、 D1 RTMP流:rtmp://192.168.1.100:1935/live/livestream_normal_profile
試驗用CDN的edge流:
1、 原始RTMP流:rtmp://192.168.1.100:19350/live/livestream
2、 1080P RTMP 流:rtmp://192.168.1.100:19350/live/livestream_super_profile
3、 720P RTMP流:rtmp://192.168.1.100:19350/live/livestream_high_profile
4、 D1 RTMP流:rtmp://192.168.1.100:19350/live/livestream_normal_profile
HLS流:
http://192.168.1.100:8080/live/livestream.m3u8
HTTP-FLV 流:
http://192.168.1.100:8080/live/livestream.flv
試驗用拉流到srs的訪問流:
rtmp://192.168.1.100:1935/live/ingest_livestream