Ubuntu中使用Nginx+rtmp模块搭建流媒体视频点播服务

1. 背景

不知不觉笔者来到流媒体部门已经一年半多了,积攒了很多的流媒体知识,但平时工做也比较忙,不多进行总结性的梳理,最近准备花几个周末时间写一个流媒体系列的实践文章,也算是给本身作总结的同时帮助有须要的开发者;nginx

在这一节中咱们主要是经过nginx+rtmp模块搭建一个点播服务,就是你有不少视频文件,想让其余人观看就能够参考这篇文章,和笔者以前的一篇文章 使用PHP结合Ffmpeg快速搭建流媒体服务实践 ,应用场景基本一致,不过这篇文章当中不涉及任何代码,相对来讲更加简单。git

在这个流媒体系列文章当中,已实践为主,在文章当中的每一条命令都通过笔者亲自运行并提供相关截图,并说明其中参数的来意,但愿可以更好的帮助到读者。github

2. 运行环境

为了此服务后期部署到生产环境中,笔者采用docker方式来搭建此服务,而且通常在生产环境中咱们一般使用Linux系统做为服务器,因此我选择了Ubuntu这个系统,其余系统搭建流程基本相似。docker

2.1 docker容器

rtmp服务默认端口是1935,另外安装nginx后须要进行验证,须要开放一个http端口,为了防止和宿主机冲突,这里咱们使用8081端口;咱们须要将视频文件拷贝到容器中,所以还须要挂载一个目录,所以docker容器运行命令以下所示ubuntu

docker run --name video -v /Users/tangqingsong/files:/root/videos -d -i -p 8081:8081  -p 1935:1935 ubuntu:18.04 && docker ps
复制代码

命令很执行完成以后,docker返回结果以下图所示 vim

image
在上图中中能够看到已经有一个容器运行了,接着咱们须要进入容器安装nginx和rtmp模块,进入容器命令以下所示

docker exec -it video bash
复制代码

命令执行完成以后,返回信息以下图所示 segmentfault

image
在上图中从光标位置的左侧能够看到已经显示了root帐户名称,说明已经进入容器成功;

2.2 国内加速源

docker的Ubuntu镜像apt软件源默认使用官方域名,这个域名在国内访问很是慢,为了后续安装速度可以更快,咱们将apt的软件源更换成阿里云源的地址,执行命令以下所示浏览器

echo 'deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse ' > /etc/apt/sources.list  && cat /etc/apt/sources.list
复制代码

命令执行以后,返回的信息以下图所示 bash

image
从上图中能够看到已经执行成功,已经使用阿里云的软件源替代了默认的软件源;

2.3 更新软件源列表

接下来咱们更新一下本地的软件源信息,执行命令以下所示服务器

apt update
复制代码

命令执行以后,返回的信息以下图所示

image
从上图中能够看到已经从阿里云中更新了软件源信息,更新速度也很是快,到此咱们已经完成运行环境的基础准备。

3 Nginx安装

在咱们准备好系统环境以后,咱们就须要开始安装Nginx了,安装Nginx咱们须要先把他的依赖给安装,而后下载相关的源码进行编译,最后执行编译安装

3.1 安装Nginx依赖

在咱们更新apt软件源完成以后,就能够安装Nginx等一些软件的依赖环境,执行的命令以下所示

apt-get install -y libpcre3 libpcre3-dev libssl-dev zlib1g-dev gcc  wget unzip vim make curl
复制代码

安装的依赖软件有点多,会根据你的网速安装速度也不同,命令执行以后,返回的信息以下图所示

image
从上图中能够看到依赖已经安装完成,接下来咱们开始安装nginx,nginx不能使用apt安装,须要源码编译安装才能够,由于须要咱们编译一个模块进去

3.2 下载源码

咱们首先将须要的模块下载下来,这里我不许备使用nginx-rtmp-module,而是使用nginx-http-flv-module来替代,由于后者是基于前者开发的,前者拥有的功能后者都有,后者是国内的开发开发,有中文文档,因此就采用它了,首先将它下载下来并解压,执行的命令以下所示

wget https://github.com/winshining/nginx-http-flv-module/archive/master.zip ; unzip master.zip
复制代码

命令执行以后,返回的信息以下图所示

image
从上图中能够看出已经下载并解压完成,接着咱们还须要下载nginx自己的源码,下载Nginx源码并解压的命令以下所示

wget http://nginx.org/download/nginx-1.17.6.tar.gz  && tar -zxvf nginx-1.17.6.tar.gz
复制代码

命令执行以后,返回的信息以下图所示

image
下载并解压完成,到此咱们两个所须要的源码都准备完成

3.3 编译安装

接着咱们进入编译安装环节,首先进入刚才解压的nginx目录当中,执行的命令以下所示

cd  nginx-1.17.6 && ls
复制代码

命令执行以后,返回的信息以下图所示

image
从上图中能够看到解压出来的目录结构,咱们执行 ./configure即可以配置编译参数,这个地方咱们须要将刚才下载的插件 nginx-http-flv-module加入进来,执行的命令以下所示

./configure --add-module=../nginx-http-flv-module-master
复制代码

命令执行以后,返回的信息以下图所示

image
在上图中能够看到准备编译已经完成,但在编译的过程中有可能会出现一些意外因素,nginx默认编译很是严格,只要遇到一些意外就会中断编译,所以咱们将一些非致命的意外设置为警告模式,执行命令以下所示

vim objs/Makefile
复制代码

在当前文件夹下有一个objs/Makefile文件,咱们将里面的-Werror删除,用vim打开文件后以下所示

命令执行以后,返回的信息以下图所示

image

删除以后,保存并退出,接着就能够进行编译Nginx了,编译的过程稍微有点长,执行的命令以下所示

make 
复制代码

命令执行以后,返回的信息以下图所示

image
在上图中能够看到一些Nginx的一些日志存放路径信息,当咱们执行安装命令后,就会往这些文件里写入相应信息,执行安装命令以下所示

make install
复制代码

安装命令执行以后,返回的信息以下图所示

image
在上图中能够能够看到安装过程大体执行了哪些命令,安装完成后接下来须要进行一些简单的配置就可使用了

4. 配置rtmp服务

在完成Nginx的安装以后,咱们须要对Nginx进行一番配置,并启动Nginx服务

4.1 添加rtmp服务

咱们直接使用vim命令去编辑Nginx的配置文件,执行命令以下所示

vim /usr/local/nginx/conf/nginx.conf
复制代码

vim命令执行以后,打开的编辑窗口以下所示

image
咱们将如下配置信息复制并粘贴到配置文件信息里面,放在http配置上面

rtmp {                #RTMP服务
   server {
       listen 1935;  #//服务端口
        chunk_size 4096;   #//数据传输块的大小


        application vod {
                play /opt/video/vod; #//视频文件存放位置。
        }
   }
}
复制代码

4.2 验证配置

粘贴完成并保存以后,咱们在终端执行nginx -t命令,来测试一下配置文件是否有异常,执行命令以下所示

/usr/local/nginx/sbin/nginx -t
复制代码

命令执行以后,返回的信息以下图所示

image
在上图中能够看出Nginx提示咱们配置文件没有异常,说明咱们配置没有语法错误,咱们启动一下Nginx并使用curl命令来测试启动是否成功,执行命令以下所示

/usr/local/nginx/sbin/nginx && curl http://127.0.0.1
复制代码

命令执行以后,返回的信息以下图所示

image
从上图中Nginx返回的信息能够看出咱们Nginx服务已经启动成功

5 视频播放

在上述环节都操做完毕以后,此时基本都处于正常,如今咱们就能够开始来播放视频了,不过咱们还须要在视频目录下放一个视频文件,这样才能播放到这个视频

5.1 添加视频文件

接着咱们建立一个存放视频的文件夹,并将权限设置设置为777,防止由于权限问题致使没法播放,执行命令以下所示

mkdir -p /opt/video/vod  && chmod -R 777 /opt/video/vod
复制代码

命令执行以后,返回的信息以下图所示

image
在上图中能够看出,建立文件夹和设置权限命令已经执行完成,接着咱们须要将咱们准备好的视频文件复制到咱们以前配置指定的目录下,执行命令以下所示

cp /root/videos/out.mp4 /opt/video/vod &&  ls /opt/video/vod
复制代码

命令执行以后,返回的信息以下图所示

image
在上图中能够看出,已经将视频文件 out.mp4文件复制到此目录中,接着咱们就能够测试播放了;不过在测试播放以前咱们须要安装一个视频播放器,由于浏览器是不支持 rtmp协议。

5.2 安装VLC播放器

通常用于调试流媒体咱们习惯使用vlc播放器,咱们去官网下载一下他,官网地址以下

https://www.videolan.org/
复制代码

使用浏览器打开官网后,咱们在首页能看到下载按钮,同时也能够看出支持各类平台,默认下载当前系统的版本,以下图所示

image

下载并安装vlc播放器完成后,咱们须要在菜单中找到File->Open Network,以下图所示

image

点击Open Network选项后,会打开一个新的窗口,在这个窗口中咱们能够输入咱们的播放地址,我刚才复制过去的视频播放地址对应以下所示

rtmp://localhost/vod/out.mp4
复制代码

image

在上图中能够看到窗口中有一个输入框,将播放地址复制进去以后,点击右下方的open按钮,就能够开始播放了,点击后成功播放效果下图所示

image
这次经过Nginx+rtmp模块搭建点播服务已经成功了,在下一篇文章中我将搭建直播服务,欢迎关注个人博客~


做者:汤青松

日期:2019-11-28

微信:songboy8888

相关文章
相关标签/搜索