24

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

 4 years ago
source link: https://segmentfault.com/a/1190000021145990
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1. 背景

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

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

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

2. 运行环境

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

2.1 docker容器

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

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

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

7Jb6Nvj.png!web

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

docker exec -it video bash

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

2Mjq6r7.png!web

在上图中从光标位置的左侧可以看到已经显示了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

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

Bn2IR3Y.png!web

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

2.3 更新软件源列表

接下来我们更新一下本地的软件源信息,执行命令如下所示

apt update

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

VZRVJ3J.png!web

从上图中可以看到已经从阿里云中更新了软件源信息,更新速度也非常快,到此我们已经完成运行环境的基础准备。

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

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

QjeM3yu.png!web

从上图中可以看到依赖已经安装完成,接下来我们开始安装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

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

qAbQJzb.png!web

从上图中可以看出已经下载并解压完成,接着我们还需要下载nginx本身的源码,下载Nginx源码并解压的命令如下所示

wget http://nginx.org/download/nginx-1.17.6.tar.gz  && tar -zxvf nginx-1.17.6.tar.gz

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

UJ7rmez.png!web

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

3.3 编译安装

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

cd  nginx-1.17.6 && ls

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

vmiEVbu.png!web

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

./configure --add-module=../nginx-http-flv-module-master

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

uAfuAfB.png!web

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

vim objs/Makefile

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

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

2IzuAvY.png!web

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

make

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

JfiARz7.png!web

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

make install

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

V7jU3aU.png!web

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

4. 配置rtmp服务

在完成Nginx的安装之后,我们需要对Nginx进行一番配置,并启动Nginx服务

4.1 添加rtmp服务

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

vim /usr/local/nginx/conf/nginx.conf

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

mQzAr2M.png!web

我们将以下配置信息复制并粘贴到配置文件信息里面,放在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

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

Yf6RNv2.png!web

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

/usr/local/nginx/sbin/nginx && curl http://127.0.0.1

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

NfYvEn6.png!web

从上图中Nginx返回的信息可以看出我们Nginx服务已经启动成功

5 视频播放

在上述环节都操作完毕之后,此时基本都处于正常,现在我们就可以开始来播放视频了,不过我们还需要在视频目录下放一个视频文件,这样才能播放到这个视频

5.1 添加视频文件

接着我们创建一个存放视频的文件夹,并将权限设置设置为777,防止因为权限问题导致无法播放,执行命令如下所示

mkdir -p /opt/video/vod  && chmod -R 777 /opt/video/vod

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

R7zArqJ.png!web

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

cp /root/videos/out.mp4 /opt/video/vod &&  ls /opt/video/vod

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

Jn6fQnq.png!web

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

5.2 安装VLC播放器

一般用于调试流媒体我们习惯使用vlc播放器,我们去官网下载一下他,官网地址如下

https://www.videolan.org/

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

ZbAfuyM.png!web

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

3EZfMvE.png!web

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

rtmp://localhost/vod/out.mp4

UzQ7VzY.png!web

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

qaQfmiY.png!web

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

作者:汤青松

日期:2019-11-28

微信:songboy8888


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK