天天看點

Linux下使用Nginx搭建Rtmp流媒體伺服器,實作視訊直播功能

一、環境介紹

作業系統:虛拟機運作的Ubuntu18.04 64位系統

二、流媒體伺服器介紹

百度百科: 流媒體指以流方式在網絡中傳送音頻、視訊和多媒體檔案的媒體形式。相對于下載下傳後觀看的網絡播放形式而言,流媒體的典型特征是把連續的音頻和視訊資訊壓縮後放到網絡伺服器上,使用者邊下載下傳邊觀看,而不必等待整個檔案下載下傳完畢。由于流媒體技術的優越性,該技術廣泛應用于視訊點播、視訊會議、遠端教育、遠端醫療和線上直播系統中。作為新一代網際網路應用的标志,流媒體技術在近幾年得到了飛速的發展。

流媒體伺服器是流媒體應用的核心系統,是營運商向使用者提供視訊服務的關鍵平台。流媒體伺服器的主要功能是對流媒體内容進行采集、緩存、排程和傳輸播放。流媒體應用系統的主要性能展現都取決于媒體伺服器的性能和服務品質。是以,流媒體伺服器是流媒體應用系統的基礎,也是最主要的組成部分。

流媒體伺服器的主要功能是以流式協定(RTP/RTSP、MMS、RTMP等)将視訊檔案傳輸到用戶端,供使用者線上觀看;也可從視訊采集、壓縮軟體接收實時視訊流,再以流式協定直播給用戶端。

nginx伺服器是開源的高性能的http伺服器,反向代理伺服器,在國内許多公司應用比較多。

rtmp是實時消息傳輸協定(real time messaging protocol),主要應用在流媒體傳輸,實時音視訊通信的協定。

三、搭建流媒體伺服器需要下載下傳的軟體包

下載下傳示例:  

wbyq@wbyq:~/work_pc$ mkdir nginx      
wbyq@wbyq:~/work_pc$ cd nginx/
wbyq@wbyq:~/work_pc/nginx$ wget http://nginx.org/download/nginx-1.10.3.tar.gz
wbyq@wbyq:~/work_pc/nginx$ wget http://zlib.net/zlib-1.2.11.tar.gz
wbyq@wbyq:~/work_pc/nginx$ wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
wbyq@wbyq:~/work_pc/nginx$ wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
wbyq@wbyq:~/work_pc/nginx$ wget https://github.com/arut/nginx-rtmp-module/archive/master.zip      

下載下傳過程:

wbyq@wbyq:~/work_pc/nginx$ wget http://nginx.org/download/nginx-1.10.3.tar.gz
--2020-04-08 09:12:24--  http://nginx.org/download/nginx-1.10.3.tar.gz
正在解析主機 nginx.org (nginx.org)... 62.210.92.35, 95.211.80.227, 2001:1af8:4060:a004:21::e3
正在連接配接 nginx.org (nginx.org)|62.210.92.35|:80... 已連接配接。
已發出 HTTP 請求,正在等待回應... 200 OK
長度: 911509 (890K) [application/octet-stream]
正在儲存至: “nginx-1.10.3.tar.gz”
 
nginx-1.10.3.tar.gz                    100%[=========================================================================>] 890.15K  38.2KB/s    用時 20s   
 
2020-04-08 09:12:45 (44.0 KB/s) - 已儲存 “nginx-1.10.3.tar.gz” [911509/911509])
 
wbyq@wbyq:~/work_pc/nginx$ wget http://zlib.net/zlib-1.2.11.tar.gz
--2020-04-08 09:12:48--  http://zlib.net/zlib-1.2.11.tar.gz
正在解析主機 zlib.net (zlib.net)... 68.66.224.49
正在連接配接 zlib.net (zlib.net)|68.66.224.49|:80... 已連接配接。
已發出 HTTP 請求,正在等待回應... 200 OK
長度: 607698 (593K) [application/x-gzip]
正在儲存至: “zlib-1.2.11.tar.gz”
 
zlib-1.2.11.tar.gz                     100%[=========================================================================>] 593.46K   164KB/s    用時 3.6s  
 
2020-04-08 09:12:57 (164 KB/s) - 已儲存 “zlib-1.2.11.tar.gz” [607698/607698])
 
wbyq@wbyq:~/work_pc/nginx$ wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
--2020-04-08 09:13:05--  https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
正在解析主機 ftp.pcre.org (ftp.pcre.org)... 131.111.8.88
正在連接配接 ftp.pcre.org (ftp.pcre.org)|131.111.8.88|:443... 已連接配接。
已發出 HTTP 請求,正在等待回應... 200 OK
長度: 2065161 (2.0M) [application/x-gunzip]
正在儲存至: “pcre-8.40.tar.gz”
 
pcre-8.40.tar.gz                       100%[=========================================================================>]   1.97M   166KB/s    用時 11s   
 
2020-04-08 09:13:17 (191 KB/s) - 已儲存 “pcre-8.40.tar.gz” [2065161/2065161])
 
wbyq@wbyq:~/work_pc/nginx$ wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
--2020-04-08 09:13:39--  https://github.com/arut/nginx-rtmp-module/archive/master.zip
正在解析主機 github.com (github.com)... 52.74.223.119
正在連接配接 github.com (github.com)|52.74.223.119|:443... 已連接配接。
已發出 HTTP 請求,正在等待回應... 302 Found
位置:https://codeload.github.com/arut/nginx-rtmp-module/zip/master [跟随至新的 URL]
--2020-04-08 09:13:40--  https://codeload.github.com/arut/nginx-rtmp-module/zip/master
正在解析主機 codeload.github.com (codeload.github.com)... 13.250.162.133
正在連接配接 codeload.github.com (codeload.github.com)|13.250.162.133|:443... 已連接配接。
已發出 HTTP 請求,正在等待回應... 200 OK
長度: 545945 (533K) [application/zip]
正在儲存至: “master.zip”
 
master.zip                             100%[=========================================================================>] 533.15K   392KB/s    用時 1.4s  
 
2020-04-08 09:13:42 (392 KB/s) - 已儲存 “master.zip” [545945/545945])      

如果有些軟體包下載下傳不下來,可以登入對應的官網下載下傳或者百度直接搜尋下載下傳。

四、編譯安裝軟體包

4.1 下載下傳編譯時需要依賴的一些工具

wbyq@wbyq:~/work_pc/nginx$sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
      

4.2 将上面下載下傳的壓縮包進行解壓

wbyq@wbyq:~/work_pc/nginx$ tar xvf openssl-1.0.2k.tar.gz
wbyq@wbyq:~/work_pc/nginx$ tar xvf nginx-rtmp-module-master.tar.gz
wbyq@wbyq:~/work_pc/nginx$ tar xvf nginx-1.8.1.tar.gz
wbyq@wbyq:~/work_pc/nginx$ tar xvf pcre-8.40.tar.gz
wbyq@wbyq:~/work_pc/nginx$ tar xvf zlib-1.2.11.tar.gz      

4.3 配置nginx,生成Makefile檔案

(進入到nginx-1.8.1目錄下,配置nginx

wbyq@wbyq:~/work_pc/nginx$ cd nginx-1.8.1/
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ ./configure --prefix=/usr/local/nginx --with-debug --with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2k --add-module=../nginx-rtmp-module-master
       

執行指令時,注意下自己的依賴路徑是否正确。

4.4 修改Makefile,去掉-Werror選項

執行完上一步之後,打開objs/Makefile 檔案,找到-Werror選項并删除。

wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ gedit objs/Makefile       
Linux下使用Nginx搭建Rtmp流媒體伺服器,實作視訊直播功能

4.5 編譯安裝 

wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ make
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ sudo make install      
Linux下使用Nginx搭建Rtmp流媒體伺服器,實作視訊直播功能

五、配置nginx服務

5.1 設定開機啟動

wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1/nginx_install/sbin$ sudo wget http://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1/nginx_install/sbin$ sudo chmod +x /etc/init.d/nginx
wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1/nginx_install/sbin$ sudo update-rc.d nginx defaults      

5.2 控制nginx服務的3個指令: 啟動、停止、重新開機

sudo service nginx start
sudo service nginx stop
sudo service nginx restart      

5.3 修改Nginx的配置檔案

打開/usr/local/nginx/conf/nginx.conf檔案,在檔案最後面加入下面的配置。

rtmp {  
    server {  
        listen 8888;   
        application live {  
            live on;  
            }
         }  
}      

因為目前隻用到了rtmp服務,代碼裡隻配置了rtmp,其他服務沒有配置。

配置代碼裡的8888是監聽的端口号。

Linux下使用Nginx搭建Rtmp流媒體伺服器,實作視訊直播功能

修改nginx.conf之後,重新開機nginx服務:

wbyq@wbyq:~/work_pc/nginx/nginx-1.8.1$ sudo service nginx restart      

重新開機服務之後,使用netstat -ltn指令檢視TCP監聽的端口,确認下Nginx的監聽端口是否正常。

Linux下使用Nginx搭建Rtmp流媒體伺服器,實作視訊直播功能

從上面截圖裡紅線框,框了2個端口,一個是我們自己設定的rtmp服務監聽端口8888,還有一個80是Nginx預設的HTTP服務監聽端口。

接下來可以在浏覽器裡輸入本機IP位址:

http://127.0.0.1/

,檢視Nginx服務開啟狀态。

Linux下使用Nginx搭建Rtmp流媒體伺服器,實作視訊直播功能

六、安裝FFMPEG測試推流

安裝ffmpeg庫的方法參考這裡:

https://blog.csdn.net/xiaolong1126626497/article/details/104919095

使用ffmpeg指令推流本地的攝像頭和音頻資料到RTMP伺服器:

ffmpeg -thread_queue_size 128 -f video4linux2 -r 12 -s 1280x720 -i /dev/video0 -f alsa -i default -ar 44100 -ac 1 -f mp3 -qscale 5 -vcodec libx264 -acodec aac -f flv "rtmp://127.0.0.1:8888/live/xl"      

我這裡是本地測試,向伺服器推流位址就是:rtmp://127.0.0.1:8888/live/xl

其中127.0.0.1是你伺服器的IP位址,8888是rtmp監聽的端口号,live在配置檔案裡已經固定,xl可以随便填這是rtmp的臨時目錄。

Linux下使用Nginx搭建Rtmp流媒體伺服器,實作視訊直播功能

推流之後在linux下可以安裝個Mplayer播放器,拉流檢視視訊。

$ mplayer rtmp://127.0.0.1:8888/live/xl      

拉流的位址和推流的位址是一樣的。

Linux下使用Nginx搭建Rtmp流媒體伺服器,實作視訊直播功能

如果在雲服務上搭建,有公網IP位址,就可以實作遠端直播功能了。

通過ffmpeg代碼推流程式設計,可以參考這裡:

https://blog.csdn.net/xiaolong1126626497/article/details/105377651

繼續閱讀