[SRS+docker]实现直播服务器 2 SRS单机直播能力验证
目錄
1 前言
2 能力要求
3 基礎(chǔ)環(huán)境
4 環(huán)境搭建
4.1 說(shuō)明
4.1.1 知識(shí)儲(chǔ)備
4.1.2 網(wǎng)絡(luò)環(huán)境
4.2 SRS版本選型
4.2.1 SRS-github
4.3 搭建模式
4.4 搭建流程
4.4.1 安裝desktop
4.4.2 搭建centos7
4.4.3 啟動(dòng)centos7容器
4.4.4 進(jìn)入容器
4.4.5 安裝編譯環(huán)境
4.4.6拉取源碼
4.4.7 編譯源碼
4.4.8 srs配置文件
4.4.9 srs服務(wù)端口
4.4.10?啟動(dòng)SRS
5 直播測(cè)試
5.1 obs
5.1.1 簡(jiǎn)介
5.1.2 安裝
5.1.3 使用
5.2 vlc安裝
5.2.1 簡(jiǎn)介
5.2.2 安裝
5.2.3 使用
6 直播驗(yàn)證
6.1 推流
6.2 拉流
6.3 直播地址
6.3.1 推流地址
6.3.2 拉流地址
6.4 驗(yàn)證結(jié)果
6.4.1 遺留問(wèn)題
1 前言
上一篇已經(jīng)簡(jiǎn)單介紹了SRS的一些基本信息,以及使用SRS需要考慮的一些設(shè)計(jì)約束。
上一篇直達(dá):傳送門(mén)
2 能力要求
SRS作為一個(gè)直播技術(shù)方案,那么直播的最基本能力必須要滿足。因此這一篇就是來(lái)搭建一個(gè)單機(jī)版的直播服務(wù)器,驗(yàn)證SRS的直播能力。
3 基礎(chǔ)環(huán)境
| 組件 | 描述 | 備注 |
| Docker | Docker容器模擬服務(wù)器 | 暫時(shí)沒(méi)有多余閑置的服務(wù)器,因此利用docker在本機(jī)搭建比較省資源,同時(shí)為后續(xù)集群做準(zhǔn)備 |
| Centos7.0 | SRS依賴linux環(huán)境 | 也可以使用ubuntu |
| C++編譯環(huán)境 | 安裝C++的編譯環(huán)境 | SRS是基于C++編寫(xiě)的 |
| Git | 代碼檢出工具 | SRS4.x版本擁有最全的直播協(xié)議,該版本沒(méi)有安裝版,只能通過(guò)下載源碼自行編譯。 |
4 環(huán)境搭建
4.1 說(shuō)明
4.1.1 知識(shí)儲(chǔ)備
作者本地已經(jīng)安裝好了desktop,所以docker環(huán)境具備了。這邊就不分享docker環(huán)境怎么搭建的教程了。想看的可以查看:《docker從0到1》
4.1.2 網(wǎng)絡(luò)環(huán)境
srs的很多資料,都需要訪問(wèn)到github,所以大家要想辦法弄出可以訪問(wèn)github的網(wǎng)絡(luò)環(huán)境。筆者在學(xué)的過(guò)程,也針對(duì)這個(gè)問(wèn)題做了解決:github在gitee上都有對(duì)應(yīng)的映射,所以通常只要把github的地址里頭的github改成gitee就可以了。下面在分享過(guò)程也會(huì)在附上github地址的同時(shí)盡可能附上對(duì)應(yīng)的gitee地址。
4.2 SRS版本選型
srs分為安裝版和源碼版,筆者在使用過(guò)程一開(kāi)始有使用安裝版測(cè)試過(guò),但是裝好之后就不知道該怎么用了,最主要的是安裝版的網(wǎng)上的資料比較少,所以最終筆者選擇的是SRS的源碼版。
如果想要了解srs安裝版的,作者附上安裝版的其他作者的地址,有興趣的可以去查看(注:筆者操作過(guò)去之后,就沒(méi)有進(jìn)一步的成長(zhǎng)了,因?yàn)镾RS的內(nèi)容很多,要研究的也很多,使用安裝版,就不知道怎么繼續(xù)了):
https://cloud.tencent.com/developer/article/1505068?from=article.detail.1408113
4.2.1 SRS-github
要用srs源碼,那么勢(shì)必少不了SRS的官方github地址了:
https://github.com/ossrs/srs(對(duì)應(yīng)gitee:https://gitee.com/ossrs/srs)?
筆者在編寫(xiě)博客的時(shí)候,srs的最新版是4.0.146版本,經(jīng)過(guò)查找資料發(fā)現(xiàn)srs,僅在4.0之后的版本支持webrtc,所以筆者選擇最新版的srs來(lái)搭建。
4.3 搭建模式
SRS本身有docker的鏡像,所以其實(shí)如果利用docker來(lái)安裝srs的話,最好的方式,應(yīng)該是直接利用docker的srs鏡像就可以了。但是作者考慮到:未來(lái)實(shí)際應(yīng)用的時(shí)候服務(wù)器可能是一個(gè)干凈的linux系統(tǒng),因此并不用SRS的docker鏡像來(lái)安裝,而是從搭建centos,到安裝SRS...這樣一個(gè)步驟來(lái)。
?注:上面的一些步驟,大家乍一看,可能看不懂是什么意思,其實(shí)沒(méi)有關(guān)系的,跟著我的教程走一著就好了,因?yàn)槔镱^的諸如C++編譯環(huán)境之類(lèi)的,筆者也不是很懂。
4.4 搭建流程
4.4.1 安裝desktop
請(qǐng)參考:《docker從0到1》
4.4.2 搭建centos7
安裝好desktop之后,這個(gè)時(shí)候window電腦上就有了docker的全局命令了。
打開(kāi)cmd。輸入docker pull centos:7。
等拉取完畢之后,通過(guò)docker images命令驗(yàn)證centos7鏡像是否下載下來(lái)了。
4.4.3 啟動(dòng)centos7容器
接下來(lái)就是啟動(dòng)一個(gè)centos7的docker容器,因?yàn)閟rs需要用到1935 8080 1985 80 8000 這幾個(gè)端口,所以必須要映射出來(lái)(這些端口做啥用的,下面會(huì)解釋到。),其次,srs要作為后臺(tái)服務(wù)來(lái)運(yùn)行,因此需要設(shè)置以特權(quán)模式啟動(dòng)容器。啟動(dòng)命令如下:
docker run -d??-p 1935:1935 -p 8080:8080 -p 1985:1985 -p 80:80 -p 8000:8000/udp ??--privileged=true 5de52d772a3c /usr/sbin/init注:5de52d772a3c 是centos7的imageId。
4.4.4 進(jìn)入容器
docker exec -it xxxxx /bin/bash注:xxxxxx是containerId
4.4.5 安裝編譯環(huán)境
逐個(gè)執(zhí)行下面的yum命令,來(lái)安裝所有的需要的編譯環(huán)境。
# 安裝編譯環(huán)境 yum -y install gcc gcc-c++ # 安裝編譯環(huán)境 yum install -y patch # 安裝編譯環(huán)境 yum install -y unzip # 安裝編譯環(huán)境 yum -y install gcc automake autoconf libtool make # 安裝 git yum install -y git4.4.6拉取源碼
按照下面的順序依次執(zhí)行命令,之后就會(huì)在/home/git/目錄下下載下來(lái)srs的源碼。
注意:拉取過(guò)程跟網(wǎng)絡(luò)環(huán)境有很大的關(guān)系,假如運(yùn)行到git clone...的時(shí)候,出現(xiàn)失敗的情況,那么要多試幾下,自然就會(huì)成功了。
# 創(chuàng)建 git 數(shù)據(jù)目錄 mkdir -p /home/git# 訪問(wèn) git 數(shù)據(jù)目錄 cd /home/git# 從碼云拉代碼 git clone https://gitee.com/winlinvip/srs.oschina.git srs && ls# 查看碼云代碼 cd srs/trunk && ls# 切換到官方 git git remote set-url origin https://github.com/ossrs/srs.git && ls# 更新代碼 git pull# 切換到 Develop 分支 git checkout develop && ls# 如果要查看所有發(fā)布的git版本可以使用 git tag4.4.7 編譯源碼
編譯過(guò)程是c++的編譯過(guò)程,不要慌,就是一條命令的事,沒(méi)啥大不了的。
注意:上面拉取源碼的時(shí)候,我們已經(jīng)cd到了/home/git/srs/trunk?;谶@個(gè)執(zhí)行下面的命令:
./configure --with-hls --with-ssl --with-http-server --with-http-callback --with-http-api --with-ingest --with-stream-caster && make?編譯之后,會(huì)在文件夾下新增一些文件或者文件夾,比如會(huì)新增objs文件夾,下面srs啟動(dòng)要依賴這個(gè)。
4.4.8 srs配置文件
srs是根據(jù)配置文件來(lái)啟動(dòng)的,選擇不同的文件,srs就會(huì)以不同的協(xié)議和配置來(lái)啟動(dòng)服務(wù)。srs的配置文件在/home/git/srs/trunk/conf下面?;旧峡梢园凑者@么一個(gè)規(guī)律來(lái)將配置文件進(jìn)行分類(lèi):
| rtc | 以webRTC協(xié)議啟動(dòng),提供webRTC服務(wù) |
| flv | 以http-flv協(xié)議啟動(dòng),提供flv服務(wù) |
| hls | 以hls協(xié)議啟動(dòng),提供hls服務(wù) |
| 其他,如rtmp | 以rtmp協(xié)議啟動(dòng),提供rtmp服務(wù) |
4.4.9 srs服務(wù)端口
上面,我們有講到需要對(duì)srs暴露幾個(gè)接口,那么為什么暴露的是這么幾個(gè)接口呢?那么需要稍微了解下srs的服務(wù)有哪些,分別有什么用。
| 端口 | 服務(wù) | 說(shuō)明 |
| 1935 | RTMP服務(wù) | RTMP推流 |
| RTMP拉流 | ||
| 8080 | FLV服務(wù) | FLV拉流 |
| HLS服務(wù) | HLS拉流 | |
| Rtc播放器 | http://localhost:8080/players/rtc_player.html | |
| 1985 | 控制臺(tái) | SRS控制臺(tái) eg:http://192.168.211.4:1985/console |
| srs內(nèi)置api | 比如webRTC播放的時(shí)候需要用api去初始化 | |
| 8000 | Udp服務(wù) | WebRTC使用udp播放,udp默認(rèn)8000端口 |
| 80 | 待補(bǔ)充 | 待補(bǔ)充 |
4.4.10?啟動(dòng)SRS
srs運(yùn)行的模式非常多,比如基于rtmp,rtc,hls...,現(xiàn)在講這個(gè),可能大家聽(tīng)不懂,先都不用管,直接在上一步所在的目錄運(yùn)行:
./objs/srs -c ./conf/rtc2rtmp.conf不出意外的話,srs應(yīng)該是啟動(dòng)成功了。
上面選擇rtc2rtmp.conf配置文件來(lái)啟動(dòng)的原因是為后面的講解webRTC協(xié)議做準(zhǔn)備。
至此,srs的環(huán)境搭建好了。整個(gè)環(huán)境都是在centos7里頭完成。下面就要開(kāi)始聯(lián)動(dòng)srs來(lái)實(shí)現(xiàn)直播了。
5 直播測(cè)試
5.1 obs
5.1.1 簡(jiǎn)介
Open Broadcaster Software是一個(gè)免費(fèi)的開(kāi)源的視頻錄制和視頻實(shí)時(shí)流軟件。其有多種功能并廣泛使用在視頻采集,直播等領(lǐng)域。現(xiàn)在很多直播的軟件都是使用obs來(lái)采集直播端的視頻,然后推送到直播服務(wù)器,再由直播服務(wù)器將視頻流推送到客戶端進(jìn)行播放。
5.1.2 安裝
官網(wǎng)地址為:https://obsproject.com/zh-cn/download
從官網(wǎng)地址可以下載對(duì)應(yīng)的obs軟件下來(lái),安裝即可。
5.1.3 使用
obs的功能很強(qiáng)大,可以采集電腦攝像頭的實(shí)時(shí)視頻,也可以播放視頻文件,或者直播電腦桌面等,而且這些視頻源可以合成再直播。
重點(diǎn)查看下面截圖里頭圈起來(lái)的幾個(gè)功能:
上圖里頭箭頭指向的幾個(gè)功能最重要。其中設(shè)置功能可以設(shè)置將視頻推給哪個(gè)直播服務(wù)器:?
?其中服務(wù)器的ip改成你本機(jī)的ip,注意是本機(jī)哦,不是docker-centos7容器的ip,因?yàn)槲覀冊(cè)趩?dòng)容器的時(shí)候已經(jīng)將容器里頭的端口映射出來(lái)了。其他的包括串流密鑰都保持不變。至于為什么要這么設(shè)置,下面會(huì)解釋的。
整個(gè)obs使用過(guò)程如下:
然后查看srs的日志,就可以看到流推過(guò)去了。
5.2 vlc安裝
5.2.1 簡(jiǎn)介
簡(jiǎn)單、快速、強(qiáng)大的媒體播放器。
VLC Media Player 是一款可播放大多數(shù)格式,而無(wú)需安裝編解碼器包的媒體播放器。可以播放 MPEG-1、MPEG-2、MPEG-4、DivX、DVD/VCD、數(shù)字衛(wèi)星頻道、數(shù)字地球電視頻道(digital terrestrial television channels)、在許多作業(yè)平臺(tái)底下透過(guò)寬頻 IPv4、IPv6 網(wǎng)絡(luò)播放線上影片;此軟件開(kāi)發(fā)項(xiàng)目是由法國(guó)學(xué)生所發(fā)起的,參與者來(lái)自于世界各地,設(shè)計(jì)了多平臺(tái)的支持,可以用于播放網(wǎng)絡(luò)串流及本機(jī)多媒體檔案之播放。
5.2.2 安裝
官網(wǎng)地址:https://vlc-media-player.en.softonic.com/
從官網(wǎng)地址里頭下載vlc軟件,并安裝
5.2.3 使用
我們通過(guò)obs推流,然后視頻流會(huì)跑到直播服務(wù)器,這個(gè)時(shí)候我們要通過(guò)vlc去拉取在直播服務(wù)器上的視頻流到本地,然后通過(guò)vlc播放出來(lái)。按照如下幾個(gè)步驟就可以播放了:
選擇打開(kāi)網(wǎng)絡(luò)串流:
輸入網(wǎng)絡(luò)url,注意跟推流的url是一樣的:
?
?然后點(diǎn)擊播放就可以播放了。
6 直播驗(yàn)證
在obs和vlc里頭配置地址的時(shí)候,都是以rtmp開(kāi)頭的,說(shuō)明推流和拉流都是使用rtmp協(xié)議。
6.1 推流
推流的概念,就是往直播服務(wù)器推送視頻流,obs就是推流的軟件
6.2 拉流
拉流的概念,就是往直播服務(wù)器拉取視頻流,vlc就是拉流的軟件
6.3 直播地址
地址涉及到兩種類(lèi)型的地址,第一種是推流的地址,還有一個(gè)是拉流的地址。
通常,我們都是使用rtmp的協(xié)議來(lái)進(jìn)行推流的,拉流的格式比較多,比如我們可以使用rtmp的協(xié)議拉流,也可以使用hls協(xié)議、flv協(xié)議、rtc協(xié)議(即webrtc)。另外拉流和推流的協(xié)議沒(méi)有要求說(shuō)必須一樣。上面的例子,我們使用rtmp來(lái)進(jìn)行推流和拉流。
不管是哪種協(xié)議,地址的格式都是一樣的。下面分析下直播的地址。
6.3.1 推流地址
推流地址決定了拉流的地址,這邊地址指的是不包含協(xié)議的部分。
以上面的rtmp協(xié)議推流為例子:
服務(wù)器:rtmp://192.168.211.3:1935/live
串流密鑰:1
其中服務(wù)器里頭的live是自定義的字符串,表示哪個(gè)應(yīng)用。串流密鑰也是自定義的字符串,表示哪個(gè)流。所以對(duì)于一個(gè)直播服務(wù)器而言,應(yīng)用名稱和流共同決定了一個(gè)唯一的視頻流。
所以,假如說(shuō)有兩路直播要同時(shí)進(jìn)行,那么這個(gè)時(shí)候,你可以通過(guò)改變應(yīng)用名稱或者流名稱來(lái)新劈一個(gè)直播通道。
需要注意的一點(diǎn)是:協(xié)議只是直播的一種傳輸模式,并不是決定視頻流的要素。
其次,通常使用rtmp來(lái)推流
6.3.2 拉流地址
上面說(shuō)推流地址決定了拉流的地址,指的是推流里頭的應(yīng)用名稱和流名稱。
因?yàn)榭赡墚?dāng)前有多路直播,那么我們要拉取的是哪一路的直播,那么就要明確我們要拉取的這一路直播的推流地址,然后如下方式來(lái)構(gòu)建拉流地址(假如應(yīng)用名稱為live,流為1):
以rtmp協(xié)議來(lái)拉流的地址:rtmp://ip:1935/live/1
以hls協(xié)議來(lái)拉流的地址:http://ip:8080/live/1.m3u8
以flv協(xié)議來(lái)拉流的地址:http://ip:8080/live/1.flv
以rtc協(xié)議來(lái)拉流的地址:webrtc://ip/live/1
注意:上面的幾種協(xié)議,都可以使用vlc來(lái)播放,但是依賴srs的配置,本次案例里頭,我們使用的是rtc2rtmp.conf配置文件,這個(gè)配置文件支持rtmp協(xié)議的拉流和rtc協(xié)議的拉流,其他兩種是否支持待驗(yàn)證。后面會(huì)講到使用hls協(xié)議或者是flv協(xié)議來(lái)拉流需要用到哪個(gè)配置文件
6.4 驗(yàn)證結(jié)果
直播整個(gè)體系結(jié)構(gòu)如下:
?經(jīng)過(guò)驗(yàn)證得出如下結(jié)論:
6.4.1 遺留問(wèn)題
延遲時(shí)間是通過(guò)肉眼的方式來(lái)觀測(cè),這個(gè)其實(shí)是不準(zhǔn)的,后續(xù)會(huì)尋找通過(guò)軟件的方式來(lái)監(jiān)測(cè)延遲的時(shí)間的。
?下一篇:基于webrtc協(xié)議的SRS低延遲直播研究
總結(jié)
以上是生活随笔為你收集整理的[SRS+docker]实现直播服务器 2 SRS单机直播能力验证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Pytorch-ACDC】复现U-Ne
- 下一篇: Linux下端口映射工具