搭建Nginx-rtmp流媒体服务器+使用ffmpeg推流
https://www.jianshu.com/p/06c2025edcd3
sudo apt-get install build-essential
sudo ./configure –prefix=/usr/local/nginx –with-pcre=../nginx-dependence/pcre-8.40 –with-zlib=../nginx-dependence/zlib-1.2.11 –with-openssl=../nginx-dependence/openssl-1.1.0 –with-http_ssl_module –add-module=../nginx-dependence/nginx-rtmp-module
我是在根目录下安装的依赖。首先在根目录下创建一个叫做nginx-dependence的文件夹
sudo mkdir nginx-dependence
然后在nginx-dependence中安装依赖,按行依次运行以下命令。这些依赖一定不要使用apt-get 安装 ,因为后面在配置Nginx的时候,要提供这些依赖的源码路径。(我一开始是使用apt-get 安装 依赖的,结果在nginx 的configure 步骤出现问题,所以我就重新安装了)
cd nginx-dependence
sudo wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
sudo tar -zxvf pcre-8.40.tar.gz
cd pcre-8.40/
sudo ./configure
sudo make
sudo make install
sudo wget http://zlib.net/zlib-1.2.11.tar.gz
sudo tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
sudo ./configure
sudo make
sudo make install
sudo wget https://www.openssl.org/source/old/1.1.0/openssl-1.1.0.tar.gz
sudo tar -zxvf openssl-1.1.0.tar.gz
cd openssl-1.1.0/
sudo ./config
sudo make
sudo make install
在nginx-dependence目录中,先下载nginx-rtmp-module
git clone https://github.com/arut/nginx-rtmp-module.git
安装Nginx
首先运行:
apt-get install build-essential
apt-get install libtool
然后下载并安装Nginx,我安装的版本是1.12.0,我也是安装在根目录的。
依次运行下面的指令。
回到nginx-dependence上一层目录
sudo wget http://nginx.org/download/nginx-1.12.0.tar.gz
sudo tar -zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0/
sudo ./configure –prefix=/usr/local/nginx –with-pcre=../nginx-dependence/pcre-8.40 –with-zlib=../nginx-dependence/zlib-1.2.11 –with-openssl=../nginx-dependence/openssl-1.1.0 –with-http_ssl_module –add-module=/nginx-dependence/nginx-rtmp-module
sudo make
sudo make install
–with-pcre=../nginx-dependence/pcre-8.40 就是我的pcre依赖所放置的位置,这个位置可根据自己的安装位置进行灵活配置。–add-module=。。/nginx-dependence/nginx-rtmp-module 这个module 的路径也要正确设置为之前下载nginx-rtmp-module的路径。如果出现找不到什么文件,那么就是目录设置错误。
启动Nginx
如果上面的步骤都没有出错,则可以检验一下nginx是否已经安装正确了:在命令行中输入这个命令启动nginx服务器:
sudo /usr/local/nginx/sbin/nginx
如果没有报任何错误,则可以打开浏览器看看nginx是否启动成功。打开浏览器,输入localhost 或本机的IP地址,按回车,如果看到这样的界面,说明nginx已经安装成功并且启动成功了。如图
如果有的时候启动时出现这样的提示如图:
这是重复启动导致的。运行sudo /usr/local/nginx/sbin/nginx -s stop可以先停止运行之前启动的,然后再次运行
sudo /usr/local/nginx/sbin/nginx就没有问题了。
nginx服务器有一个配置文件叫做nginx.conf ,这个文件默认是位于/usr/local/nginx/conf 目录下。
我将这个文件改成这样:
worker_processes 1;
error_log logs/error.log debug;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
application videotest{
live on;
}
}
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
其中rtmp就是rtmp服务器模块,端口是1935,application我理解为一个路径。可以通过访问rtmp://localhost/videotest 来访问videotest这个资源。live on 表示这是实时的传输,这不同于点播,点播就好比我在某视频网站上想看一个视频,无论我什么时候去点击,它会从头开始播放。而实时传输(直播),就是好比看电视,我在19:20去打开电视(打开直播路),视频不会从头开始播放,而是从当前(19:20)的视频数据开始播放。
除了配置rtmp服务器,还可以配置HTTP和HTTPS服务器。这方面我还没有深入去了解。更多关于nginx服务器和其配置方式,请阅读nginx官网 。
首先安装h264 视频编解码库:
sudo apt-get update
sudo apt-get install libx264-dev
安装ffmpeg ,依次输入以下命令:
wget http://ffmpeg.org/releases/ffmpeg-3.0.9.tar.bz2
tar jxvf ffmpeg-3.0.9.tar.bz2
cd ffmpeg-3.0.9/
sudo ./configure –enable-shared –enable-pthreads –enable-gpl –enable-avresample –enable-libx264 –enable-libtheora –disable-yasm
动态
sudo ./configure –disable-shared –enable-static –enable-pthreads –enable-gpl –enable-avresample –enable-libx264 –enable-libtheora –disable-yasm
静态
如果出现错误 ,可能需要安装sudo apt-get -y install libtheora-dev
sudo make
sudo make install
其中sudo make 这个过程会比较久。安装完ffmpeg之后,在命令行中输入ffmpeg:
如果出现找不到库,说明是使用动态编译,库的路径无法找到。
因为这里我重新用静态命令编译一遍,然后就成功了。
配置好nginx.conf之后,重新启动sudo /usr/local/nginx/sbin/nginx
然后在命令行中使用 ffmpeg 进行推流:
ffmpeg -re -i /home/hjh/nginx/video.mp4 -vcodec copy -acodec copy -b:v 800k -b:a 32k -f flv rtmp://localhost:1935/videotest/test
/home/hjh/nginx/video.mp4自己需要播放的文件。
在本机器上用vlc打开串流rtmp://localhost:1935/videotest/test如图:
这里有一个bug,局域网中其他电脑访问服务器需要使用:
rtmp://10.150.90.230:1935/videotest/test
10.150.90.230 表示服务器的IP地址,并且需要加入端口号,否则只能在本机服务器上播放,其他电脑如法播放。