一 概要說明
使用nginx搭建流媒體直播平台,目的就是要支援rtmp協議,實現使用者使用rtmp(rtmp://192.168.201.128/myapp)協議推送流到伺服器。然後其他使用者點播該使用者推送的視頻流資訊。既然是rtmp協議,所以可以用Adobe 的 FlashMediaLiveEncoder程式,也可以更專業的串流大師軟體來完成前端的直播採集和編碼。個人是比較喜歡使用串流大師的,因為這款軟體是目前國內做得最專業的前端編碼系統。老實說我其實也是flash和flex開發人員,開發個多款WEB視頻程式和視頻會議系統。Java水平也是很高的。歡迎打臉,我這種人就不怎麼謙虛,因為我覺太謙虛就虛偽了。在世面上有很多流媒體伺服器。有商業的也有開源,比如常用FMS,Red5,wowza.crtmpserver,等,如果是做小型視頻會議,我個人強烈推薦Red5。Red5有很開放的api,對於開發即時性要求比較高的很方便。開發工具和開發java的人上手也很快。
二 環境準備
1 準備一台Linux的作業系統,我的Centos5。windows 再nignx上自己編譯模組很麻煩的,所以我就在CentOS上測試。我的系統資訊如下:
Linux localhost 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 athlon i386 GNU/Linux
2 準備軟體包
nginx-1.4.7.tar.gz
nginx-rtmp-module-1.1.7.tar.gz
三 開始安裝
1 安裝nginx所需要的依賴包。注意不同系統或者模組需要的依賴包是不一樣的。我這裡值安裝最基本的就行了。
[root@localhost html]# yum install -y gcc gcc-c++
[root@localhost html]# yum install –y openssl-devel pcre-devel zlib-devel
注意:最好不要用預設的yum源。都統一換成阿里雲的yum源。
2 先解壓包,這不沒什麼難度吧。然後執行ningx設定檔。執行沒問題後,執行編譯,安裝
[root@localhost local]# tar -zvxf nginx-1.4.7.tar.gz
[root@localhost local]# wget https://github.com/arut/nginx-rtmp-module/archive/v1.1.7.tar.gz
[root@localhost local]# tar nginx-rtmp-module-1.1.7.tar.gz
[root@localhost local]# tar -zxvf nginx-rtmp-module-1.1.7.tar.gz
[root@localhost local]# cd /usr/local/nginx-1.4.7
./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-rtmp-module-1.1.7
[root@localhost nginx-1.4.7]# make && make install
輸出日誌我就不貼出來了。編譯完成後。就該修改nginx的設定檔,讓nginx支援rtmp協議。
3 修改設定檔後內容如下(改設定檔可以參考):
[root@localhost test]# pwd
/usr/local/nginx-rtmp-module-1.1.7/test
[root@localhost test]# ll
total 56
-rwxrwxr-x 1 root root 49 Mar 24 2015 dump.sh
-rwxrwxr-x 1 root root 84 Mar 24 2015 ffstream.sh
-rw-rw-r-- 1 root root 1245 Mar 24 2015 nginx.conf
-rwxrwxr-x 1 root root 59 Mar 24 2015 play.sh
-rw-rw-r-- 1 root root 499 Mar 24 2015 README.md
drwxrwxr-x 2 root root 4096 Mar 24 2015 rtmp-pu
為了方便我把我的ngin的設定檔完整的貼出來:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
application myapp {
live on;
#record keyframes;
#record_path /tmp;
#record_max_size 128K;
#record_interval 30s;
#record_suffix .this.is.flv;
#on_publish http://localhost:8080/publish;
#on_play http://localhost:8080/play;
#on_record_done http://localhost:8080/record_done;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
四 啟動伺服器,測試
1 執行nginx/sbin/nginx 啟動服務。你應該能夠看到伺服器也啟用1935連接埠,就表示nginx已經支援rtmp推送流了。
[root@localhost conf]# netstat -antpl
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN 11908/nginx
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2674/portmap
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11908/nginx
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 2965/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2989/sendmail: acce
tcp 0 0 0.0.0.0:765 0.0.0.0:* LISTEN 2703/rpc.statd
tcp 0 0 192.168.201.128:1935 192.168.201.1:55561 ESTABLISHED 11950/nginx: worker
tcp 0 1934 192.168.201.128:1935 192.168.201.1:55575 ESTABLISHED 11950/nginx: worker
tcp 0 0 :::22 :::* LISTEN 2950/sshd
tcp 0 0 ::ffff:192.168.201.128:22 ::ffff:192.168.201.1:56019 ESTABLISHED 12197/sshd: root@no
tcp 0 592 ::ffff:192.168.201.128:22 ::ffff:192.168.201.1:53081 ESTABLISHED 3268/1
2 拷貝你/usr/local/nginx-rtmp-module-1.1.7/test/www 目錄下的所有檔案放到nginx的html下。這個是rtmp模組提供的測試案例。就是一個flash用戶端推送流和一個播放流的案例;看起來如下:
[root@localhost www]# cd /usr/local/nginx/html/
[root@localhost html]# ll
total 60
-rw-r--r-- 1 root root 537 Feb 5 18:54 50x.html
-rw-r--r-- 1 root root 15145 Feb 5 19:05 bg.jpg
-rw-r--r-- 1 root root 511 Feb 5 19:06 index.html
drwxr-xr-x 2 root root 4096 Feb 5 19:05 jwplayer
drwxr-xr-x 2 root root 4096 Feb 5 19:05 jwplayer_old
-rw-r--r-- 1 root root 1460 Feb 5 19:07 record.html
五 測試,
1 開啟瀏覽器輸入地址:http://192.168.201.128/record.html 這是個推送流的測試地址。開啟會提示你允許使用你網路攝影機。允許就行了。如下
2 開啟另外一個瀏覽器,輸入http://192.168.201.128/index.html 這個測試播放地址效果如下:
六 總結。
你可以用OBS來發布到nginx.也是可以的。總的來說這種方式還不錯的,但是如果要即時性高,群組視訊就不太適用。