使用nginx搭建流媒體直播平台

來源:互聯網
上載者:User

一 概要說明

使用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.也是可以的。總的來說這種方式還不錯的,但是如果要即時性高,群組視訊就不太適用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.