Nginx学习之配置RTMP模块搭建推流服务

写在开始

小程序升级实时音视频录制及播放能力,开放 Wi-Fi、NFC(HCE) 等硬件连接功能。同时提供按需加载、自定义组件和更多访问层级等新特性,增强了第三方平台的能力,以满足日趋丰富的业务需求。

为更高效地连接用户与商家,小程序提供了实时音视频录制及播放组件。符合类目要求的小程序自助开通后,可自建或使用云服务,实现单向、双向甚至多向的音视频功能,如在线授课、远程咨询、视频客服,以及多人会议等。

2017-12-26微信小程序推送了这样一条消息,文档,代码也是简单的一笔带过,用户需要自建或使用云服务,实现单向、双向甚至多向的音视频功能。目前仅支持 flv, rtmp 格式。

本篇博客通过介绍使用nginx的rtmp模块来使nginx服务支持rtmp协议,可以完成推流和播放的功能。

开发环境

Linux (centos7),Nginx (openresty),nginx-rtmp-module

安装

由于之前已经安装过了openresty,详见博文。这里我们只需要安装nginx-rtmp-module模块即可。

下载并解压模块:

wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip  master.zip

停止原来的Nginx服务:

nginx -s stop

配置并编辑:

./configure --add-module=/home/nginx-rtmp-module-master
make

复制Nginx:

## 路径根据自己软件路径自行配置
cp /home/openresty/build/nginx-1.11.2/objs/nginx /usr/local/openresty/nginx/sbin

配置rtmp服务:

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

检查并启动服务:

nginx -t
nginx

播放

上传一个视频文件test.flv至/opt/video目录。

下载一个VLC media player,工具栏-媒体-打开网络串流-网络,然后偶输入网络URL(rtmp://ip:port/vod/test.flv),点击播放。

回看

实时回看视频服务器的配置:

events {
    use epoll;# 选择epoll模型可以达到最佳的IO性能
    worker_connections  1024;
}

rtmp {                #RTMP服务
    server {
       listen 1935;  #//服务端口
       chunk_size 4096;   #//数据传输块的大小
       application vod {
           play /opt/video; #//视频文件存放位置。
       }
       application live{ #直播
           live on;
           hls on; #这个参数把直播服务器改造成实时回放服务器。
           wait_key on; #对视频切片进行保护,这样就不会产生马赛克了。
           hls_path /opt/video/hls; #切片视频文件存放位置。
           hls_fragment  600s;     #设置HLS片段长度。
           hls_playlist_length 10m;  #设置HLS播放列表长度,这里设置的是10分钟。
           hls_continuous on; #连续模式。
           hls_cleanup on;    #对多余的切片进行删除。
           hls_nested on;     #嵌套模式。
       }
   }
}

HTTP服务:

server {
        listen       80;
        server_name  rtmp.52itstyle.com;

        location /stat {
          rtmp_stat all;
           rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /home/nginx-rtmp-module-master/;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }
        location /live {  #这里也是需要添加的字段。
            types {
               application/vnd.apple.mpegurl m3u8;
               video/mp2t ts;
            }
            alias /opt/video/hls;
            expires -1;
            add_header Cache-Control no-cache;
            add_header Access-Control-Allow-Origin *;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

微信推流

<live-pusher webviewId="push" url="rtmp://ip:port/live/itstyle"
    mode="HD"
    autopush ="true"
    bindstatechange="statechange"
    beauty = "10"
    whiteness="10"
    style="width: 300px; height: 225px;" />

手机打开小程序页面,进行视频推流服务,稍后我们会在/opt/video/hls/itstyle 目录下发现一些ts文件和index.m3u8文件。

注意 url中的itstyle可以随便定义,相当于一个房间标识。

PC推流

PC 直播是在 PC(windows/mac)上借助安装的推流软件 OBS(推荐)或者 XSplit 向RTMP视频云的推流地址,推送经过压缩编码现场活动、教学、投影或者游戏等画面,同时观众可以通过和推流地址相对应的播放地址收看实时画面。

PC 直播流程非常简单,主要步骤:

  • 通过RTMP自定义一个推流地址,解决往哪推流的问题;
  • 采用第三方的推流软件,设置推流音视频源以及编码参数,解决推什么内容的问题;
  • 观众就可以使用我们提供的 RTMP DEMO 通过设置播放地址即可进行观看,解决内容触达到观众那里的问题。

推荐阅读:第三方推流工具使用指南

Web播放

xiaozhibo.html:

<!DOCTYPE html>
<html lang="zh-cmn-Hans">
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, shrink-to-fit=no">
        <title>小直播</title>
        <meta name="keywords" content="">
        <meta name="description" content="小直播——直播分享">
        <meta name="format-detection" content="telephone=no">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <meta name="msapplication-tap-highlight" content="no">
        <script src="//imgcache.qq.com/open/qcloud/video/vcplayer/TcPlayer-2.2.1.js" charset="utf-8"></script>
    </head>
    <body>
        <div id="id_test_video" style="width:100%; height:auto;"></div>
        <script type="text/javascript">
           var player =  new TcPlayer(‘id_test_video‘, {
                "m3u8": "http://rtmp.52itstyle.com/live/itstyle002/index.m3u8",
                "autoplay" : true,//iOS下safari浏览器,以及大部分移动端浏览器是不开放视频自动播放这个能力的
                "coverpic" : "https://blog.52itstyle.com/usr/uploads/2017/12/2652725976.jpg",
                "width" :  ‘480‘,//视频的显示宽度,请尽量使用视频分辨率宽度
                "height" : ‘320‘//视频的显示高度,请尽量使用视频分辨率高度
            });
        </script>
    </body>
</html>

跨域问题crossdomain.xml放置在网站根目录:

<cross-domain-policy>
  <allow-access-from domain="*.qq.com" secure="false"/>
</cross-domain-policy>

测试访问地址:http://rtmp.52itstyle.com/xiaozhibo.html

参考文档:

http://www.cnblogs.com/zx-admin/p/5783523.html

https://cloud.tencent.com/document/product/267

https://github.com/arut/nginx-rtmp-module/wiki/Directives#rtmp

作者: 小柒

出处: https://blog.52itstyle.com

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

原文地址:http://blog.51cto.com/itstyle/2059267

时间: 2024-08-22 00:00:58

Nginx学习之配置RTMP模块搭建推流服务的相关文章

Nginx基础知识之————RTMP模块中的中HLS专题(翻译文档)

一.在Nginx配置文件的RTMP模块中配置hls hls_key_path /tmp/hlskeys; 提示错误信息: nginx: [emerg] the same path name "/data/hlskeys" used in /usr/local/nginx/conf/nginx.conf:178 and in /usr/local/nginx/conf/nginx.conf:178 解决办法: 查看官方RTMP源代码:nginx-rtmp-module / hls /ng

Linux下安装Nginx+php并配置php-fpm模块

以下以CentOS 7.2为例,先从安装php开始: 安装php的运行环境,首先打开php官网的Downloads页面:http://php.net/downloads.php 把安装包下载之后,上传至服务器, 因为php安装需要编译,所以服务器应该保证gcc和g++环境的安装, 首先释放安装包: tar -xvzf php-7.0.5.tar.gz cd php-7.0.5 接下来进行参数配置,配置前如果没有libxml2和libxml2-devel会报错,所以应该更新libxml2并安装li

Nginx学习笔记(二)——搭建Web服务器

背景介绍 Nginx自诞生起就采用了2.6以后内核所支持的epoll模型进而使得处理效率大幅提升而受到了广大用户的青睐,但就Web服务来讲,Nginx所拥有的功能Apache都可以实现,但反过来确不行,这就是大多数场景时使用Nginx作为反向代理而不能取代Apache的原因.本文以Nginx_1.12.1版本为例,介绍Nginx充当Web服务器时的配置及用法. 软件安装 尽管Nginx已经被收录进epel源,但仍然推荐使用编译的方式进行安装,这样更为灵活.安装步骤为: 1.从Nginx官网下载1

nginx学习(二)——模块指令介绍

nginx.conf 配置文件详解 Nginx 配置文件主要分成四部分:main(全局设置).server(主机设置).upstream(上游服务器设置,主要为反向代理.负载均衡相关配置)和 location(URL匹配特定位置后的设置).main 部分设置的指令影响其他所有部分的设置:server 部分的指令主要用于制定虚拟主机域名.IP 和端口号:upstream 的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡:location 部分用于匹配网页位置(比如,根目录“/”

nginx学习与配置-安装与启动关闭管理

nginx服务器的安装 安装准备: nginx依赖于pcre库,要先安装pcre yum install pcre pcre-devel cd /usr/local/src/ wget wget http://nginx.org/download/nginx-1.6.3.tar.gz tar zxvf nginx-1.6.3.tar.gz cd nginx-1.6.3 ./configure --prefix=/data/local/nginx make && make install 这

nginx rtmp模块 实现hls

nginx rtmp  ffmpeg 组合模仿hls直播 前几天老总说搞了一个局域网内的直播,想到了之前提到的rtmp模块,抱着试试看的的心态 开干了 系统环境: [[email protected] html]# uname -a  Linux localhost.localdomain 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:35 EDT 2010 i686 athlon i386 GNU/Linux [[email protected] html]# g

实战Puppet 集中配置管理系统(3)——Puppet dashboard与nginx+passenger安装配置

     本次实验内容紧接前两次实验,第一节内容主要介绍PUPPET的安装认证与资源定义,第二节主要写apache与nginx模块的应用,本次介绍Puppet dashboard与nginx+passenger 的安装,Puppet dashboard 是用以 web 方式管理 puppet.puppet 默认使用基于 Ruby 的WEBRickHTTP 来处理 HTTPS 请求,单个服务器使用Apache/Nginx+Passenger 替换掉 WEBRickHTTP,Passenger 是用

Docker 安装 Nginx 负载均衡配置

Docker 安装 # 1)安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 # 2)添加Docker软件包源(否则doker安装的不是新版本) yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 3)安装Docker CE yum install -y docker-ce # 4)启动Doc

使用 nginx 和 rtmp 插件搭建视频直播和点播服务器

使用 nginx 和 rtmp 模块 ,可以很容易地搭建一个视频直播和点播服务器出来. 首先,看一下最经典的参考文献: How to set up your own private RTMP server using nginx 1. 安装 nginx 和 rtmp 模块 有关 nginx 的编译和安装比较简单,这里就不介绍了,看参考文献.这里提示以下几点: (1) 安装好 nginx 后,配置文件在这里: /usr/local/nginx/conf/nginx.conf (2) 启动 ngin