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