流媒体服务器之nginx的rtmp模块

简介:

1 简介

RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。

2 环境

2.1 环境信息

IP Address=10.168.0.51

HostName=rtmp.cmdschool.org

OS=CentOS 7.3

2.2 yum源配置

1
2
yum -y  install  gcc gcc-c++  make  expat-devel 
yum -y  install  rpm-build

2.3 创建构建用户

useradd -u 1001 builder

2.4 关闭selinux

1
2
setenforce 0
sed  -i  's/SELINUX=enforcing/SELINUX=disabled/g'  /etc/selinux/config

3 构建rpm包部分

3.1 下载安装包

1
2
3
4
su  - builder
cd  ~
wget http: //nginx .org /packages/centos/7/SRPMS/nginx-1 .8.1-1.el7.ngx.src.rpm
wget -O nginx-rtmp-module-master.zip https: //codeload .github.com /arut/nginx-rtmp-module/zip/master

3.2 解压并测试构建环境

3.2.1 构建环境和测试

1
2
rpm -ivh nginx-1.8.1-1.el7.ngx.src.rpm
rpmbuild -bb rpmbuild /SPECS/nginx .spec

3.2.2 异常情况

如果看到类似提示:

1
2
3
4
5
6
7
8
9
warning: bogus  date  in  %changelog: Thu Aug  5 2014 Sergey Budnevitch <sb@nginx.com>
warning: bogus  date  in  %changelog: Thu Jul 12 2014 Sergey Budnevitch <sb@nginx.com>
warning: bogus  date  in  %changelog: Tue Jul 17 2013 Sergey Budnevitch <sb@nginx.com>
warning: bogus  date  in  %changelog: Tue May  6 2013 Sergey Budnevitch <sb@nginx.com>
warning: bogus  date  in  %changelog: Tue Aug 10 2011 Sergey Budnevitch
error: Failed build dependencies:
         openssl-devel >= 1.0.1 is needed by nginx-1:1.8.1-1.el7.centos.ngx.x86_64
         zlib-devel is needed by nginx-1:1.8.1-1.el7.centos.ngx.x86_64
         pcre-devel is needed by nginx-1:1.8.1-1.el7.centos.ngx.x86_64

请先解决包的依赖关系然后重试:

1
2
exit
yum  install  -y openssl-devel zlib-devel pcre-devel

3.2.3 正常情况

如果末尾类似的提示表示构建环境测试通过或称重新打包完成:

1
2
3
4
5
umask  022
cd  /home/builder/rpmbuild/BUILD
cd  nginx-1.8.1
/bin/rm  -rf  /home/builder/rpmbuild/BUILDROOT/nginx-1 .8.1-1.el6.ngx.x86_64
exit  0

3.3 配置增加模块的源文件

1
2
3
4
unzip nginx-rtmp-module-master.zip
cp  -a nginx-rtmp-module-master nginx-rtmp-module
tar  zcvf nginx-rtmp-module. tar .gz nginx-rtmp-module
cp  nginx-rtmp-module. tar .gz rpmbuild /SOURCES/

3.4 修改构建文件

3.4.1 创建配置文件副本

1
cp  rpmbuild /SPECS/nginx .spec rpmbuild /SPECS/nginx .spec.default

3.4.2 修改配置文件参数

1
vim rpmbuild /SPECS/nginx .spec

修改如下参数:

1
2
3
4
5
6
7
8
9
10
11
Source10: nginx.suse.logrotate
Source11: nginx-rtmp-module. tar .gz
[..]
%setup -q
%setup -T -D -b 11
 
%build
[..]
         --add-module=.. /nginx-rtmp-module
                 $*
make  %{?_smp_mflags}

注:增加第2,5,9行

3.5 重新构建rpm包

1
2
rpmbuild -bb rpmbuild /SPECS/nginx .spec
exit

4 配置RTMP服务

4.1 安装nginx包

1
2
cd  /home/builder/rpmbuild/RPMS/x86_64/
yum -y  install  nginx-1.8.1-1.el7.centos.ngx.x86_64.rpm

注:以上包可拷贝到其他CentOS7.3的机器上安装

4.2 确认模块启用

1
nginx -V

显示如下:

1
2
3
4
5
nginx version: nginx /1 .8.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix= /etc/nginx  --sbin-path= /usr/sbin/nginx  --conf-path= /etc/nginx/nginx .conf --error-log-path= /var/log/nginx/error .log --http-log-path= /var/log/nginx/access .log --pid-path= /var/run/nginx .pid --lock-path= /var/run/nginx .lock --http-client-body-temp-path= /var/cache/nginx/client_temp  --http-proxy-temp-path= /var/cache/nginx/proxy_temp  --http-fastcgi-temp-path= /var/cache/nginx/fastcgi_temp  --http-uwsgi-temp-path= /var/cache/nginx/uwsgi_temp  --http-scgi-temp-path= /var/cache/nginx/scgi_temp  --user=nginx --group=nginx --add-module=.. /nginx-rtmp-module  --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with- file -aio --with-ipv6 --with-http_spdy_module --with-cc-opt= '-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'

可见配置的参数后面有加载模块:

1
--add-module=.. /nginx-rtmp-module

4.3 程序数据目录

1
2
3
mkdir  -p  /var/www/html
chown  nginx:nginx  /var/www/html
chmod  700  /var/www/html

4.4 创建配置文件

1
vim  /etc/nginx/nginx .conf

修改内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
worker_processes 1;
 
events {
  worker_connections 1024;
}
 
rtmp {
   server {
     listen 1935;
     chunk_size 4096;
     application myapp {       # 定义一个频道myapp
       live on;
       play  /var/www/html ;    # 定义频道的根目录
     }
   }
}
 
http {
  server {
    listen 80;
    location  /stat  {            # 定义状态的访问URI
      rtmp_stat all;
      rtmp_stat_stylesheet stat.xsl;
    }
 
    location  /stat .xsl {        # 定义状态文件路径
      root  /var/www/html ;
    }
    
    location / {                # 定义播放器网页访问的URI和根目录
      root  /var/www/html ;
    }
    
  }
}

4.5 重启服务并配置服务默认启动

1
2
systemctl restart nginx
systemctl  enable  nginx

4.6 配置防火墙

1
2
3
4
firewall-cmd --permanent --add-port 1935 /tcp
firewall-cmd --permanent --add-service http
firewall-cmd --reload
firewall-cmd --list-all

4.7 上传测试文件

拍一个手机视频(MP4文件)上传到频道定义目录“/var/www/html”用于测试(笔者上传的是“1431308733062.mp4”)。

注:由于Nginx的rtmp模块一个简单的流媒体服务器,故对编码格式支持有限,他需要“ffmpeg”来补充,由于本案例只是基于Nginx扩展模块实现流媒体服务器,故这里不详述。

5 客户端配置

5.1 下载客户端并解压

1
2
3
cd  /var/www/html
wget https: //ssl .p.jwpcdn.com /player/download/jwplayer-7 .10.7.zip
unzip jwplayer-7.10.7.zip

注:下载前要先在官网注册账号

5.2 使用代码加载播放器

1
vim  /var/www/html/index .html

输入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<html>
     < head >
         <script src= './jwplayer-7.10.7/jwplayer.js' >< /script >
         <script>jwplayer.key= '******XCUoBbOY0Xq+PLboip3jP7gEy4******==' ;< /script >
     < /head >
     <body>
         <div  id = "player" >Loading the player...< /div >
         <script>
             //  Setup the player
             const player = jwplayer( 'player' ).setup({
                 file 'rtmp://10.168.0.51/myapp/1431308733062.mp4'
              });
 
             //  Listen to an event
             player.on( 'pause' , (event) => {
                 alert( 'Why did my user pause their video instead of watching it?' );
             });
 
             //  Call the API
             const bumpIt = () => {
                 const vol = player.getVolume();
                 player.setVolume(vol + 10);
             }
             bumpIt();
         < /script >
     < /body >
< /html >

注:修改第3,4,11行,其中第3行是播放器的解压位置,第4行是播放器的SN,第11行是流媒体的绝对路径。

5.3 测试播放

1
http: //10 .168.0.51

wKioL1kJjPSgfaREAAQpdY6gWqU499.png

5.4 监视播放状态

1
http: //10 .168.0.51 /stat

wKioL1kJjQbwxBukAABEvsumakQ658.png










本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/1921069,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
227 61
|
2月前
|
弹性计算 负载均衡 网络协议
ECS中实现nginx4层7层负载均衡和ALB/NLB原SLB负载均衡
通过本文的介绍,希望您能深入理解并掌握如何在ECS中实现Nginx四层和七层负载均衡,以及如何使用ALB和NLB进行高效的负载均衡配置,以提高系统的性能和可靠性。
216 9
|
2月前
|
存储 编解码 应用服务中间件
使用Nginx搭建流媒体服务器
本文介绍了流媒体服务器的特性及各种流媒体传输协议的适用场景,并详细阐述了使用 nginx-http-flv-module 扩展Nginx作为流媒体服务器的详细步骤,并提供了在VLC,flv.js,hls.js下的流媒体拉流播放示例。
276 1
|
4月前
|
应用服务中间件 nginx C++
nginx的cgi模块
nginx的cgi模块
76 0
|
5月前
|
应用服务中间件 nginx
一文搞定Nginx配置RTMP!
一文搞定Nginx配置RTMP!
268 3
|
6月前
|
缓存 应用服务中间件 nginx
安装nginx-http-flv-module模块
本文介绍如何为Nginx安装`nginx-http-flv-module`模块。此模块基于`nginx-rtmp-module`二次开发,不仅具备原模块的所有功能,还支持HTTP-FLV播放、GOP缓存、虚拟主机等功能。安装步骤包括:确认Nginx版本、下载相应版本的Nginx与模块源码、重新编译Nginx并加入新模块、验证模块安装成功。特别注意,此模块已包含`nginx-rtmp-module`功能,无需重复编译安装。
373 1
|
6月前
|
负载均衡 应用服务中间件 Linux
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
|
4天前
|
存储 机器学习/深度学习 人工智能
2025年阿里云GPU服务器租用价格、选型策略与应用场景详解
随着AI与高性能计算需求的增长,阿里云提供了多种GPU实例,如NVIDIA V100、A10、T4等,适配不同场景。2025年重点实例中,V100实例GN6v单月3830元起,适合大规模训练;A10实例GN7i单月3213.99元起,适用于混合负载。计费模式有按量付费和包年包月,后者成本更低。针对AI训练、图形渲染及轻量级推理等场景,推荐不同配置以优化成本和性能。阿里云还提供抢占式实例、ESSD云盘等资源优化策略,支持eRDMA网络加速和倚天ARM架构,助力企业在2025年实现智能计算的效率与成本最优平衡。 (该简介为原文内容的高度概括,符合要求的字符限制。)
|
6天前
|
存储 弹性计算 人工智能
2025年阿里云企业云服务器ECS选购与配置全攻略
本文介绍了阿里云服务器的核心配置选择方法论,涵盖算力需求分析、网络与存储设计、地域部署策略三大维度。针对不同业务场景,如初创企业官网和AI模型训练平台,提供了具体配置方案。同时,详细讲解了购买操作指南及长期运维优化建议,帮助用户快速实现业务上云并确保高效运行。访问阿里云官方资源聚合平台可获取更多最新产品动态和技术支持。
|
8天前
|
弹性计算 JavaScript 前端开发
一键安装!阿里云新功能部署Nodejs环境到ECS竟然如此简单!
Node.js 是一种高效的 JavaScript 运行环境,基于 Chrome V8 引擎,支持在服务器端运行 JavaScript 代码。本文介绍如何在阿里云上一键部署 Node.js 环境,无需繁琐配置,轻松上手。前提条件包括 ECS 实例运行中且操作系统为 CentOS、Ubuntu 等。功能特点为一键安装和稳定性好,支持常用 LTS 版本。安装步骤简单:登录阿里云控制台,选择扩展程序管理页面,安装 Node.js 扩展,选择实例和版本,等待创建完成并验证安装成功。通过阿里云的公共扩展,初学者和经验丰富的开发者都能快速进入开发状态,开启高效开发之旅。