简介: 本文我们将为大家讲解如何通过 nginx + rtmp 模块搭建一个点播服务。


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

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

镜像下载、域名解析、时间同步请点击 阿里巴巴开源镜像站

作者:汤青松


一、运行环境

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


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

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

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


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

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


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


docker exec -it video bash

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

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


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

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


在上图中从光标位置的左侧可以看到已经显示了root账户名称,说明已经进入容器成功。


2. 国内加速源

我们将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

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

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


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

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


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


3. 更新软件源列表

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


apt update

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

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


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

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


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


二、Nginx 安装


1. 安装 Nginx 依赖

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


apt-get install -y libpcre3 libpcre3-dev libssl-dev zlib1g-dev gcc  wget unzip vim make curl

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

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


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

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


从上图中可以看到依赖已经安装完成,接下来我们开始安装nginx,nginx不能使用apt安装,需要源码编译安装才可以,因为需要我们编译一个模块进去。


2. 下载源码

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


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

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

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


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

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


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


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

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

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


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

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


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


3. 编译安装

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


cd  nginx-1.17.6 && ls

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

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


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

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


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


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

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

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


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

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


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


vim objs/Makefile

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

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

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


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

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


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


make

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

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


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

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


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


make install

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

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


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

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


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


三、配置 rtmp 服务


1. 添加 rtmp 服务

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


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

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

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


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

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


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


rtmp {                #RTMP服务
server {
listen 1935; #//服务端口
chunk_size 4096; #//数据传输块的大小
application vod {
play /opt/video/vod; #//视频文件存放位置。
}
}
}

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


2. 验证配置

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


/usr/local/nginx/sbin/nginx -t

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

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


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

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


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


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

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

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


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

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


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


四、视频播放


1. 添加视频文件

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


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

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

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


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

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


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


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

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

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


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

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


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


2. 安装 VLC 播放器

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


https://www.videolan.org/
Ubuntu 中使用 Nginx+rtmp 模块搭建流媒体视频点播服务_nginx_55

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


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

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


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


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

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


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


rtmp://localhost/vod/out.mp4

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


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

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


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


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

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

到此,通过Nginx+rtmp模块搭建点播服务已经成功了。

 本文转自:​​Ubuntu 中使用 Nginx+rtmp 模块搭建流媒体视频点播服务-阿里云开发者社区​