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