Nginx+rtmp 搭建流媒體服務器

目錄

前言

環境準備及編譯

測試

遇到的問題


前言

RTMP是Real Time Messaging Protocol(實時消息傳輸協議)的首字母縮寫。該協議基於TCP,是一個協議族,包括RTMP基本協議及RTMPT/RTMPS/RTMPE等多種變種。RTMP是一種設計用來進行實時數據通信的網絡協議,主要用來在Flash/AIR平臺和支持RTMP協議的流媒體/交互服務器之間進行音視頻和數據通信。——摘錄自百度。 如果大家想對RTMP有更深的認識,可以參看這篇文章:《帶你喫透RTMP》。

本文要處理的是:用 Nginx+rtmp 搭建流媒體服務器,用來做推拉流的中轉。rtmp是開源的插件,Nginx是支持高併發的服務器。

ffmpeg推流到 Nginx 服務器,然後VLC從服務器拉流播放。那麼這個服務器怎麼搭建呢,下面就詳細的記錄一下。

環境準備及編譯

1、win10上,裝VMWare Workstation, 然後安裝Ubuntu16.04

2、檢查一下用到的工具,是否存在

 cmake ,gcc,  g++, libssl-dev, libpcre3-dev, git等,需要先配置好。檢查的方式: 直接輸入工具名,回車,就可以看到有沒有了。

如果沒有,就像下面這樣去安裝。安裝不成的時候,頭部加上sudo 就可以了,以管理員權限進行安裝。

apt-get install libpcre3-dev

3、當上面的工具都準備好了,就可以進行下載

// 創建一個文件夾
mkdir nginx

// 進入文件夾
cd nginx

// 下載文件
wget http://nginx.org/download/nginx-1.12.1.tar.gz

// 解壓
tar -zxvf nginx-1.12.1.tar.gz

4、rtmp作爲一個模塊,添加到nginx文件夾中。

//下載rtmp模塊
git clone https://github.com/arut/nginx-rtmp-module.git

5、作爲一個模塊,編譯到Nginx中。 切回到nginx-1.12.1目錄下:

 // 用的絕對路徑進行安裝配置
./configure --add-module=/home/ht-dong/nginx/nginx-rtmp-module   

6、編譯

make

7、安裝

make install

8、至此,nginx就安裝在了 /usr/local/nginx/下面。

9、切換到安裝目錄下的sbin ,

cd sbin

10、啓動運行  

./nginx

如果不成功,用sudo ./nginx  (sudo是用管理員身份進行)

11、 然後查看是否啓動成功

ps -ef|grep nginx

12、Chrome瀏覽器直接輸入:http://192.168.87.6/。 顯示如下:登錄成功!

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. 
Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

13、 關閉服務

sudo pkill nginx

================以上 完成了 Nginx的安裝, 下面,進行rtmp的配置===================

1、進入到安裝目錄下

cd /usr/local/nginx/conf/

2、打開nginx.conf文件

sudo vim nginx.conf

3、添加信息, 在這個文件的最後添加,就可以。

rtmp
{
        server
        {
                listen 1935; // 端口
                chunk_size 4096;// 塊尺寸
                application live  // 目錄
                {
                        live on;
                }
        }
}

4、添加如下消息,就可以進行通過瀏覽器看到視頻詳細信息。

// 跟另外一個server平行設置的
server
    {
        listen 8080; // 端口
        location /stat
        {
                rtmp_stat all;
                rtmp_stat_stylesheet stat.xsl; //Excel表格樣式,在瀏覽器中顯示用的
        }
        location /stat.xsl
        {
                root /home/ht-dong/nginx/nginx-rtmp-module;//模塊路徑
        }
    }

這段信息添加完,就需要關閉服務/重啓服務。

sudo pkill nginx

sudo ./nginx

在推拉流的過程中,在Chrome瀏覽器中輸入:http://192.168.87.6:8080/stat

就可以看到詳細信息列表了。

 

測試

測試一

進行到上面的第3步時,就可以進行推拉流測試了。

準備好我們下載的ffmpeg—shared版本,進入bin,找到 ffmpeg.exe, 在這個文件中放一個flv文件。

然後在這個文件夾的目錄欄中,輸入 cmd, 進入命令行:

ffmpeg  -i China.flv  -f flv rtmp://192.168.87.6/live

1》打開VLC, 媒體——>打開網絡串流,輸入:rtmp://192.168.87.6/live, 播放。這裏的live,就是上面配置的文件路徑。

可以看到推流的文件,進行播放了。

2》還可以用ffplay拉流播放。

ffplay rtmp://192.168.87.6/live -fflags nobuffer // 不要緩衝,會更快

測試二

進行上面第4步時,通過瀏覽器,可以看到推拉流視頻文件的詳細信息表。

在推拉流的過程中,在Chrome瀏覽器中輸入:http://192.168.87.6:8080/stat

就可以看到詳細信息列表了。

測試三

通過ffmpeg的代碼,開發一個win32的控制檯工程,進行推流。不用ffmpeg.exe進行推流。代碼後續加上。

 

遇到的問題

重啓服務,遇到的問題:

nginx: [emerg] listen() to 0.0.0.0:1935, backlog 511 failed (98: Address already in use)
......
nginx: [emerg] listen() to 0.0.0.0:1935, backlog 511 failed (98: Address already in use)
nginx: [emerg] still could not bind()

這是因爲端口被佔用,查看一下是否被佔用:

sudo netstat -ntpl

當發現哪個線程被佔用時,就kill哪個id, 或者根據沒有進程id的時候,就需要單獨kill掉端口。

sudo kill PID  // (PID是線程ID)

或者 sudo fuser -k 1935/tcp  // 按照端口號把進程幹掉

然後就可以重啓服務器了:sudo ./nginx

打開瀏覽器,http://192.168.87.6, 可以看到成功了!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章