使用nginx搭建流媒體直播平台(該方式不適用與多人聊天)

來源:互聯網
上載者:User

一 概要說明

使用nginx搭建流媒體直播平台,目的就是要支援rtmp協議,實現使用者使用rtmp(rtmp://192.168.201.128/myapp)協議推送流到伺服器。然後其他使用者點播該使用者推送的視頻流資訊。既然是rtmp協議,所以用戶端可以是flash程式,也可以OBS(Open Broadcaster Software)這種比較福士化的直播用戶端。個人是比較喜歡使用OBS的,老實說我其實也是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]# lltotal 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.mddrwxrwxr-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 -antplActive 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]# lltotal 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.htmldrwxr-xr-x 2 root root  4096 Feb  5 19:05 jwplayerdrwxr-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.也是可以的。總的來說這種方式還不錯的,但是如果要即時性高,群組視訊就不太適用。


參考文獻:nginx+nginx-rtmp-module+ffmpeg搭建流媒體伺服器

需要安裝包和的朋友,可以給mail  845885222#qq.com





相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.