CentOS7+nginx+rtmp+ffmpeg搭建流媒體服務器(總結前人經驗親測有效)

CentOS7+nginx+rtmp+ffmpeg搭建流媒體服務器(總結前人經驗親測有效)

上次搭建了nginx文件服務器,這次遇到攝像頭傳時實錄像到前臺,需要搭建一個流媒體服務器
在搭建之前由於服務器上本來使用yum install nginx安裝過一個nginx,這個nginx還跑着某些佔用了某些端口,我們需要卸載這個nginx,不過爲了不刪數據跑路,我們暫時就不幹掉這個nginx了

#查看nginx的進程
ps -ef | grep nginx 
#幹掉所有nginx進程
#如果提示killall沒有則需要yum install psmisc安裝
killall nginx
#首先下載一些可能用到的軟件包 如果不夠後續編譯安裝報錯再繼續下載
yum install -y net-tools wget unzip gcc gcc-c++ perl openssl pcre zlib git
#下載nginx-rtmp-module模塊
git clone https://github.com/arut/nginx-rtmp-module.git
#下載nginx並解壓
#nginx的官方網站爲:http://nginx.org/en/download.html
wget http://nginx.org/download/nginx-1.8.1.tar.gz
tar -zxvf nginx-1.8.1.tar.gz

下載好之後解壓如下
在這裏插入圖片描述
配置並編譯nginx
進入到nginx-1.8.1安裝目錄, 使用nginx的默認配置,添加nginx的rtmp模塊。 add-module爲下載的nginx-rtmp-module文件路徑。

cd nginx-1.8.1
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module
make
sudo make install

由於本人已經編譯安裝沒問題 就不再重新執行上面命令了 不過需要注意的是我放包的路徑 你也可以根據自己的實際情況指定路徑
在這裏插入圖片描述
如果編譯安裝不出任何錯誤,在/usr/local/nginx/sbin下運行nginx看看是否可以正常訪問網頁
可執行文件和配置文件在這裏,不要還以爲是/etc/nginx
在這裏插入圖片描述
安裝ffmpeg

#安裝epel包
yum install -y epel-release 
#導入簽名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
#導入簽名
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro 
#升級軟件包
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
#更新軟件包
yum update -y
#安裝ffmpeg
yum install -y ffmpeg
#檢查版本
ffmpeg -version

現在修改配置文件搭建我們的流媒體nginx服務器
修改/usr/local/nginx/sbin/nginx.conf文件
在這之前我們先在服務器上上傳一個視頻文件然後在opt下建立幾個文件夾然後將上傳的測試視頻文件放在vod目錄下

mkdir -pv /opt/video/{hls,vod}

使用tree查看目錄結構 當然你也可以隨便 不過要和配置文件中的對應
在這裏插入圖片描述

#在/usr/local/nginx/sbin/nginx.conf配置文件中加入已下內容
# vim /usr/local/nginx/sbin/nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;
    chunk_size 4096;

    application vod {
        play /opt/video/vod;
    }

    application live{ #第一處添加的直播字段
        live on;
    }
    #hls配置
        application hls {  
            live on;  
            hls on;  
            hls_path /opt/video/hls;  
        } 
    }

}

http {
    include      mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen      80;
        server_name  localhost;

    location /stat {    #第二處添加的location字段。
            rtmp_stat all;
        rtmp_stat_stylesheet stat.xsl;
    }
    location /stat.xsl { #第二處添加的location字段。
       root /usr/local/nginx/nginx-rtmp-module;
   }
        location / {
            root  html;
            index  index.html index.htm;
        }
	#配置hls
        location /hls {  
            types {  
                application/vnd.apple.mpegurl m3u8;  
                video/mp2t ts;  
            }  
            root /opt;  
            add_header Cache-Control no-cache;  
        } 
        error_page  500 502 503 504  /50x.html;
        location = /50x.html {
            root  html;
        }
    }
}

然後重新加載nginx
在這裏插入圖片描述
如果配置沒問題不報錯訪問你的服務器會有如下界面(注意換成你自己的ip訪問)
在這裏插入圖片描述
接下來使用ffmpeg推流測試

#/root/myvdo.mp4也有一個測試視頻
#推流
ffmpeg -re -i /root/myvdo.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/live/stream

如果配置成功就會出現如下頁面
在這裏插入圖片描述
在這裏插入圖片描述
附加幾種推流方法 我們所用的就是最後一種 也可以播放流轉換的視頻 這裏不做演示了
UDP

# push stream local
ffmpeg -re -i h264.mp4 -vcodec copy -f h264 udp://127.0.0.1:1234
# play stream
ffplay  udp://127.0.0.1:1234
ffplay -f h264 udp://127.0.0.1:1234

RTP

# push stream local
ffmpeg -re -i h264.mp4 -vcodec copy -an -f rtp rtp://127.0.0.1:20000

RTMP

# push stream local
ffmpeg -re -i h264.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/live/stream
# play stream
ffplay rtmp://192.168.0.157:1935/live/stream
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章