搭建Nginx-rtmp流媒体服务器+使用ffmpeg推流

搭建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依赖

我是在根目录下安装的依赖。首先在根目录下创建一个叫做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服务器有一个配置文件叫做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官网 。

安装ffmpeg

首先安装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地址,并且需要加入端口号,否则只能在本机服务器上播放,其他电脑如法播放。

猜你喜欢

转载自blog.csdn.net/bvngh3247/article/details/80405423