【環境搭建】在Ubuntu16.04上搭建Nginx-rtmp流媒體服務器
關於流媒體
流媒體(streaming media)是指將一連串的媒體數據壓縮後,經過網上分段發送數據,在網上即時傳輸影音以供觀賞的一種技術與過程,此技術使得數據包得以像流水一樣發送;如果不使用此技術,就必須在使用前下載整個媒體文件。流式傳輸可傳送現場影音或預存於服務器上的影片,當觀看者在收看這些影音文件時,影音數據在送達觀看者的計算機後立即由特定播放軟件播放。
搭建Nginx-rtmp流媒體服務器
- Nginx:Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。
- rtmp:RTMP是Real Time Messaging Protocol(實時消息傳輸協議)的首字母縮寫。該協議基於TCP,是一個協議族,包括RTMP基本協議及RTMPT/RTMPS/RTMPE等多種變種。RTMP是一種設計用來進行實時數據通信的網絡協議,主要用來在Flash/AIR平臺和支持RTMP協議的流媒體/交互服務器之間進行音視頻和數據通信。
- 安裝依賴
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev
- 下載Nginx源碼包和Nginx-rtmp源碼包
wget http://nginx.org/download/nginx-1.7.5.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
- 解壓兩個源碼包後,進入到Nginx源碼包目錄內
./configure --with-http_ssl_module --add-module=解壓後的Nginx-rtmp源碼包路徑
- 編譯、編譯安裝
make
sudo make install
- 下載Nginx初始化腳本,並更改權限,設置Nginx開機自啓動
sudo wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx
sudo update-rc.d nginx defaults
移除開機自啓動的方法:
sudo update-rc.d -f nginx remove
- 安裝ffmpega
從源碼編譯安裝ffmpeg的方法在【環境搭建】在ubuntu16.04上編譯安裝ffmpeg和opencv中 - 更改nginx配置文件
sudo cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
sudo rm /usr/local/nginx/conf/nginx.conf
sudo vim /usr/local/nginx/conf/nginx.conf
添加內容如下:
#user nobody;
worker_processes 1;
error_log logs/rtmp_error.log debug;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name localhost;
location /hls {
# Serve HLS fragments
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
}
}
}
rtmp {
server {
listen 1935;
chunk_size 8192;
application hls {
live on;
meta copy;
hls on;
hls_path /tmp/hls;
}
}
}
- 添加crossdomain.xml文件
sudo vim /usr/local/nginx/html/crossdomain.xml
添加內容如下:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>
- 啓動nginx服務
cd /etc/init.d
./nginx start
- 查看nginx運行狀態
systemctl status nginx.service
- 停止nginx服務
cd /etc/init.d
./nginx start
使用obs將本地視頻推流到Nginx-rtmp流媒體服務器
爲了便於測試,在一臺windows電腦下載obs客戶端
https://obsproject.com/
- 服務選擇自定義
- 服務器地址填寫爲讓rtmp://nginx服務器的ip地址:1935/hls/
- 串流密鑰自定義任意值
在Nginx-rtmp流媒體服務器上使用VLC media player測試獲取到的視頻流
下載VLC media player
sudo apt-get install vlc
串流密鑰和obs端設置的串流密鑰一致
結語
如果您有修改意見或問題,歡迎留言或者通過郵箱和我聯繫。
手打很辛苦,如果我的文章對您有幫助,轉載請註明出處。