FFmpeg入门详解之100:搭建Nginx-rtmp流媒体服务器 使用ffmpeg推流

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

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

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/teachermei/article/details/127425780