直播配置
1. 安裝 Nginx 依賴軟件
yum -y install gcc gcc-c++ autoconf automake make
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
2. 安裝nginx與rtmp模塊
l 首先進入local目錄
cd /usr/local
l 下載nginx(沒有安裝wget的請安裝鸠澈,安裝命令:yum -y install wget)
wget http://nginx.org/download/nginx-1.13.12.tar.gz
l 解壓
tar zxvf nginx-1.13.12.tar.gz
l 創(chuàng)建nginx安裝目錄與模塊目錄
mkdir -p /usr/local/nginx/module
l 創(chuàng)建視頻數(shù)據(jù)存放位置
mkdir -p /usr/local/nginx/myapp
l 進入到/usr/local/nginx/module目錄
cd /usr/local/nginx/module
l 下載nginx-rtmp-module,下載后的文件夾名叫nginx-rtmp-module(沒有安裝git的請安裝苛骨,執(zhí)行語句的時候沒有g(shù)it會提示你)
git clone https://github.com/arut/nginx-rtmp-module.git
l 進入解壓后的nginx目錄中,指定nginx安裝目錄并且指定了安裝的模塊
cd /usr/local/nginx-1.13.12/
./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx/module/nginx-rtmp-module(此處一句命令)
l //編譯并安裝
make && make install
l //啟動nginx
/usr/local/nginx/sbin/nginx
此時如果沒有問題未荒,那么你就可以訪問http://127.0.0.1了褥实,會出現(xiàn)welcome界面。
3. 配置nginx與nginx-rtmp-module
// 在nginx-rtmp-module中帶有一個nginx.conf的配置文件锁摔,把它覆蓋到nginx中的配置文件cp /usr/local/nginx/module/test/nginx.conf /usr/local/nginx/conf 詢問你是否覆蓋,輸入y 并回車
// 編輯nginx配置文件哼审,使用vim打開
vim /usr/local/nginx/conf/nginx.conf
//(按i進入編輯模式谐腰,編輯完成后esc退出孕豹, 輸入:wq 保存并退出)
//修改nginx.conf文件,修改三處
1.Rtmp節(jié)點下十气,在live on ;下加入
hls on;
hls_path /usr/local/nginx/myapp;
2.在http 節(jié)點下励背,修改兩個root的路徑
location /rtmp-publisher {
root /usr/local/nginx/module/nginx-rtmp-module/test;
}
location / {
root /usr/local/nginx/module/nginx-rtmp-module/test/www;
}
修改之后保存即可,接下來修改web界面砸西。
第一個頁面
修改文件/usr/local/nginx/module/nginx-rtmp-module/test/www/index.html,修改ip以及端口(以下192.168.1.7為rtmp服務器ip)
第二個頁面
修改文件/usr/local/nginx/module/nginx-rtmp-module/test/www/record.html,修改ip以及端口
第三個頁面(點播配置)
創(chuàng)建視頻存放位置
mkdir -p /usr/local/nginx/vod/flvs
上傳一個mp4格式的視頻到/usr/local/nginx/vod/flvs下(以2.mp4為例)
修改文件/usr/local/nginx/module/nginx-rtmp-module/test/rtmp-publisher/player.html,修改ip以及端口
4.這時需要重新加載配置叶眉,使用命令
/usr/local/nginx/sbin/nginx -s reload
5.如果啟動沒有問題,那么訪問端口剛才已經(jīng)修改為8080那么你看到的界面應該是下圖
6.下面配置直播工具 OBS
安裝后打開界面在設(shè)置中選中芹枷,串流衅疙,類型選擇: 自定義流媒體服務器
配置圖像輸出:
在來源處點+號,選擇視頻捕捉設(shè)備杖狼,然后在設(shè)備處選擇你的攝像頭即可炼蛤。
這是可以開始直播了妖爷,點擊右側(cè)開始串流蝶涩,然后打開web地址,192.168.1.7:8080就可以看見了絮识,直播完成
訪問http://192.168.31.41:8080/rtmp-publisher/player.html即可查看上傳的視頻绿聘,點播完成
常見的直播協(xié)議
國內(nèi)常見的直播協(xié)議有幾個:RTMP、HLS次舌、HTTP-FLV
RTMP熄攘,全稱 Real Time Messaging Protocol,即實時消息傳送協(xié)議彼念。Adobe 公司為 Flash 播放器和服務器之間音視頻數(shù)據(jù)傳輸開發(fā)的私有協(xié)議挪圾。工作在 TCP 之上的明文協(xié)議,默認使用端口 1935逐沙。協(xié)議中的基本數(shù)據(jù)單元成為消息(Message)哲思,傳輸?shù)倪^程中消息會被拆分為更小的消息塊(Chunk)單元。最后將分割后的消息塊通過 TCP 協(xié)議傳輸吩案,接收端再反解接收的消息塊恢復成流媒體數(shù)據(jù)棚赔。
RTMP 主要有以下幾個優(yōu)點:RTMP 是專為流媒體開發(fā)的協(xié)議,對底層的優(yōu)化比其它協(xié)議更加優(yōu)秀徘郭,同時它 Adobe Flash 支持好靠益,基本上所有的編碼器(攝像頭之類)都支持 RTMP 輸出。現(xiàn)在 PC 市場巨大残揉,PC 主要是 Windows胧后,Windows 的瀏覽器基本上都支持 Flash。另外RTMP適合長時間播放抱环,曾經(jīng)有過測試壳快,聯(lián)系 100 萬秒途样,即 10 天多連續(xù)播放沒有出現(xiàn)問題。最后 RTMP 的延遲相對較低濒憋,一般延時在 1-3s 之間何暇,一般的視頻會議,互動式直播凛驮,完全是夠用的裆站。
當然 RTMP 并沒有盡善盡美,它也有不足的地方黔夭。一方面是它是基于 TCP 傳輸宏胯,非公共端口,可能會被防火墻阻攔本姥;另一方面肩袍,也是比較坑的一方面是 RTMP 為 Adobe 私有協(xié)議,很多設(shè)備無法播放婚惫,特別是在 iOS 端氛赐,需要使用第三方解碼器才能播放。
FLV(Flash Video) 是 Adobe 公司推出的另一種視頻格式先舷,是一種在網(wǎng)絡上傳輸?shù)牧髅襟w數(shù)據(jù)存儲容器格式艰管。其格式相對簡單輕量,不需要很大的媒體頭部信息蒋川。整個 FLV 由 The FLV Header, The FLV Body 以及其它 Tag 組成牲芋。因此加載速度極快。采用 FLV 格式封裝的文件后綴為 .flv捺球。
而我們所說的 HTTP-FLV 即將流媒體數(shù)據(jù)封裝成 FLV 格式缸浦,然后通過 HTTP 協(xié)議傳輸給客戶端。
HTTP-FLV 依靠 MIME 的特性氮兵,根據(jù)協(xié)議中的 Content-Type 來選擇相應的程序去處理相應的內(nèi)容裂逐,使得流媒體可以通過 HTTP 傳輸。相較于 RTMP 協(xié)議胆剧,HTTP-FLV 能夠好的穿透防火墻絮姆,它是基于 HTTP/80 傳輸,有效避免被防火墻攔截秩霍。除此之外篙悯,它可以通過 HTTP 302 跳轉(zhuǎn)靈活調(diào)度/負載均衡,支持使用 HTTPS 加密傳輸铃绒,也能夠兼容支持 Android鸽照,iOS 的移動端。
說了這么多優(yōu)點颠悬,也來順便說下 HTTP-FLV 的缺點矮燎,由于它的傳輸特性定血,會讓流媒體資源緩存在本地客戶端,在保密性方面不夠好诞外。因為網(wǎng)絡流量較大澜沟,它也不適合做拉流協(xié)議。
上述兩個協(xié)議都是有Adobe公司推出的峡谊,而下面要講的
HLS (HTTP Live Streaming) 則是蘋果公司基于 HTTP 的流媒體傳輸協(xié)議茫虽。主要應用于 iOS 設(shè)備,包含(iPhone, iPad, iPod touch) 以及 Mac OSX 提供音視頻直播服務和錄制內(nèi)容(點播)等服務既们。
相對于常見的流媒體協(xié)議濒析,HLS 最大的不同在于它并不是一下請求完整的數(shù)據(jù)流。它會在服務器端將流媒體數(shù)據(jù)切割成連續(xù)的時長較短的 ts 小文件啥纸,并通過 M3U8 索引文件按序訪問 ts 文件号杏。客戶端只要不停的按序播放從服務器獲取到的文件斯棒,從而實現(xiàn)播放音視頻盾致。
相較 RTMP 而言,使用 HLS 在 HTML5 頁面上實現(xiàn)播放非常簡單:
直接:
<video src = "xxx.m3u8" controls> </video>
間接
<video controls>
<souce src = "xxx.m3u8"></souce>
</video>
HLS 的優(yōu)勢:
Apple 的全系列產(chǎn)品支持:由于 HLS 是蘋果提出的名船,所以在 Apple 的全系列產(chǎn)品包括 iPhone绰上、 iPad、safari 都不需要安裝任何插件就可以原生支持播放 HLS渠驼, 現(xiàn)在 Android 也加入了對 HLS 的支持。
穿透防火墻鉴腻∶陨龋基于 HTTP/80 傳輸,有效避免防火墻攔截
性能高爽哎。通過 HTTP 傳輸蜓席, 支持網(wǎng)絡分發(fā),CDN 支持良好课锌,且自帶多碼率自適應厨内,Apple 在提出 HLS 時,就已經(jīng)考慮了碼流自適應的問題渺贤。
HLS 的劣勢:
實時性差雏胃,延遲高。HLS 的延遲基本在 10s+ 以上
文件碎片志鞍。特性的雙刃劍瞭亮,ts 切片較小,會造成海量小文件固棚,對存儲和緩存都有一定的挑戰(zhàn)
RTMP 協(xié)議為流媒體而設(shè)計统翩,在推流中用的比較多仙蚜,同時大多 CDN 廠商支持RTMP 協(xié)議。
HTTP-FLV 使用類似 RTMP流式的 HTTP 長連接厂汗,需由特定流媒體服務器分發(fā)的委粉,兼顧兩者的優(yōu)點。以及可以復用現(xiàn)有 HTTP 分發(fā)資源的流式協(xié)議娶桦。它的實時性和 RTMP 相等艳丛,與 RTMP 相比又省去了部分協(xié)議交互時間,首屏時間更短趟紊,可拓展的功能也更多氮双。
HLS 作為蘋果提出的直播協(xié)議,在 iOS 端占據(jù)了不可撼動的地位霎匈,Android 端也同時提供相應的支持戴差。
又拍云一站式直播解決方案基于又拍云 CDN,支持 RTMP铛嘱、HTTP-FLV 和 HLS 三大直播協(xié)議暖释,并且通過智能調(diào)度、鏈路保障墨吓、追幀處理球匕、丟幀處理以及業(yè)界首創(chuàng)的 HLS+ 技術(shù),將 RTMP帖烘、HTTP-FLV 直播延遲控制在1秒內(nèi)亮曹,將 HLS 直播延時控制在 4 秒左右。