注:本文環境默認爲linux
首先需要下載
nginx-1.8.1
nginx-rtmp-module
因爲nginx-rtmp-module對nginx的版本限制比較大,所以最好使用上面給出的nginx版本。
安裝nginx
1.首先下載安裝nginx-1.8.1
//也可以電腦上下載完後上傳到服務器
wget http://nginx.org/download/nginx-1.8.1.tar.gz
2.安裝依賴
yum apt-get update
yum apt-get install libpcre3 libpcre3-dev
yum apt-get install openssl libssl-dev
3.解壓
tar -zxvf nginx-1.8.1.tar.gz -C /usr/local/live
4.配置
//改變默認監聽端口(進入nginx解壓後根目錄),找到下圖位置,修改端口號
vi conf/nginx.conf
i
編輯....
ESC
shift+q
x
5.添加nginx-rtmp-module模塊並編譯安裝
將下載的nginx-rtmp-module文件解壓,進入第3步解壓完的nginx-1.8.1文件夾中
./configure --add-module=../nginx-rtmp-module-master --prefix=/usr/local/live/nginx
make
make install
6.運行nginx,進入第5步安裝完後的nginx文件
./sbin/nginx
瀏覽器出現如下界面就表示nginx安裝成功了,url爲 http:// + 服務器 ip + : + 第4步改的端口號
搭建流媒體服務器相關配置
1.繼續上面的第4步
events {
worker_connections 1024;
}
//...................
//添加的部分
rtmp {
server {
listen 8001;#之後推流拉流的端口
chunk_size 4096;
application live { #
live on;
}
}
//...................
}
server {
listen 8000;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
#...................
#添加的部分
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
#爲nginx-rtmp-module解壓的地址
root /usr/local/live/nginx-rtmp-module-master/;
}
#...................
location / {
root html;
index index.html index.htm;
}
}
配置完成後重啓nginx
./sbin/nginx -s reload
瀏覽器url: http:// + 服務器ip +: + 端口號 + /stat
出現下方紅框部分則配置成功
這時候就可以試試推流給流媒體服務器了。
我這裏是使用ffmpeg將保存在服務器上的mp4文件推成rtmp流來測試的,大家也可以使用OBS來生成rtmp推流。
講下ffmpeg吧,之後還會使用ffmpeg實現在線轉流服務。
ffmpeg安裝配置
因爲之前寫的博客中有涉及到ffmpeg安裝,所以這裏就直接放上鍊接了
ffmpeg安裝
ffmpeg推流本地MP4文件
因爲我沒有把ffmpeg加入到環境中,所以就直接用路徑運行了,
/usr/local/ffmpeg爲我的服務器ffmpeg安裝路徑。
新建/usr/local/live/video文件夾用來放置測試用的MP4文件。
rtmp://172.16.253.146:8001/live/test 推流路徑 8001 就是上面配置rtmp的監聽端口,live爲application配置號,test可以隨便取名
/usr/local/ffmpeg/bin/ffmpeg -re -i /usr/local/live/video/1.mp4 -vcodec copy -acodec copy -f flv rtmp://172.16.253.146:8001/live/test
執行上面命令後控制檯的大致樣子
此時ffmpeg正將MP4文件以rtmp協議推送給上面的nginx流媒體服務器,此時可以進入 http:// + 服務器ip +: + 端口號 + /stat 網頁查看信息
如下圖,先不要看紅框中的,應該會出現藍框中的信息,publishing,就是推流端,可以看到有一個流正在一直被推送給nginx服務器
然後可以使用播放器收看該直播流,這裏推薦時用VLC,這個百度下就能下到,所以也不放出下載地址了。
VLC收看直播流
填入上面推流的url:rtmp://172.16.253.146:8001/live/test
就可以收看剛纔推送的MP4文件直播了
然後回到剛纔的頁面,刷新下就可以看到多了一個play流,即有一個播放端在播放該RTMP流,如下圖,先無視掉藍框中的東西(那些是在線轉碼時用到的),紅框中出現了一個play,地址正是我用VLC播放直播流的PC IP地址。
實際直播時可以使用PC 上的OBS等軟件錄製直播發送推流給nginx服務器,或者什麼微信小程序等等都可以,之後有空會講下微信小程序錄制直播流和觀看直播流的相關操作。
ffmpeg在線轉流
因爲實際直播中,因爲網絡等因素,在網絡聯通不流暢時就需要看清晰度低一些的直播,所以還需要提供多個不同清晰度的直播流來供觀衆選擇。因此在線轉流也是必須的,這是我們可以看下nginx-rtmp-module作者所給出的功能介紹:
ffmpeg在線轉碼。
因爲之前我也有使用ffmpeg的經歷,所以也就直接拿來用了。
對照作者給出的使用方式模板:
# Transcoding (ffmpeg needed)
application big {
live on;
# On every pusblished stream run this command (ffmpeg)
# with substitutions: $app/${app}, $name/${name} for application & stream name.
#
# This ffmpeg call receives stream from this application &
# reduces the resolution down to 32x32. The stream is the published to
# 'small' application (see below) under the same name.
#
# ffmpeg can do anything with the stream like video/audio
# transcoding, resizing, altering container/codec params etc
#
# Multiple exec lines can be specified.
exec ffmpeg -re -i rtmp://localhost:1935/$app/$name -vcodec flv -acodec copy -s 32x32
-f flv rtmp://localhost:1935/small/${name};
}
application small {
live on;
# Video with reduced resolution comes here from ffmpeg
}
就能很輕鬆的進行配置。
我這裏設置了3個不同的清晰度,720,480,360,當然使用的ffmpeg命令只是示範,爲了更好的效果是需要調整的,配置如下:
修改之前添加的live
application live {
live on;
exec /usr/local/ffmpeg/bin/ffmpeg -re -i rtmp://172.16.253.146:8001/live/$name -vcodec flv -acodec copy -s 720x405 -f flv rtmp://172.16.253.146:8001/live720/${name};
exec /usr/local/ffmpeg/bin/ffmpeg -re -i rtmp://172.16.253.146:8001/live/$name -vcodec flv -acodec copy -s 480x270 -f flv rtmp://172.16.253.146:8001/live480/${name};
exec /usr/local/ffmpeg/bin/ffmpeg -re -i rtmp://172.16.253.146:8001/live/$name -vcodec flv -acodec copy -s 360x202 -f flv rtmp://172.16.253.146:8001/live360/${name};
}
application live720{
live on;
}
application live480{
live on;
}
application live360{
live on;
}
重啓nginx服務器,進入頁面
http:// + 服務器ip +: + 端口號 + /stat
可以看到如下,test爲原始流,然後轉碼爲其他3個不同清晰度的rtmp流,可以試試使用VLC播放4個流。
我這裏看確實分辨率下降了非常多,截圖可能看不出
另外ffmpeg還提供了將rtmp流保存爲MP4文件等等功能,所以我麼也可以根據需要來定製自己的服務。當然nginx-rtmp-module自身也可以進行相應配置將流保存到本地等等功能,這些可以去作者的博客&github自己查看文檔。
nginx-rtmp-module有一個缺點是不支持集羣,關於這裏應該如何進行架構設計可以參考 如何從零開始搭建高性能直播平臺 這裏不再深入。