RTMP+Nginx 推流_潇洒哥GG的博客-程序员信息网

技术标签: rtmp  nginx  hls  

1. 下载地址

http://nginx.org/en/download.html

2. 安装

./configure --prefix=/usr/local/nginx

3. 启动、停止、重启

nginx # 启动
nginx -s reload # 重新加载配置文件
nginx -s stop # 快速停止
nginx -s quit # 优雅的退出
nginx -s reopen # 重新打开日志文件
nginx -c filename # 指定配置文件

pkill -9 nginx # 强制停止
kill -QUIT 进程号 # 从容停止
kill -TERM 进程号 # 快速停止

4. nginx.conf 配置文件

# ... main 全局模块
events {
  # ...
}

http { # http 模块
  upstream # upstream 负载均衡块
  {
    # ...
  }
  
  server { # server 块
    # ...
    
    location [PATTERN] # location 块
    { 
      # ...
    }
  }
  
  server
  {
    
  }
}

mail { # mail 块
  
}


http {
  server {
    # 设置根目录
    location / {
      root /data/www;
    }
    
    # 设置image访问目录
    location /images/ {
      root /data;
    }
    
    # 设置代理
    location /dl/ {
      proxy_pass http://127.0.0.1:8080;
    }
    
    # 正则映射(将以.gif .png .jpg结尾的映射到指定目录)
    location ~ \.(gif|png|jpg)$ {
      root /data/images;
    }
  }
}

5. 术语

  1. Real Time Messaging Protocol,实时消息传送协议(RTMP协议)
  2. HTTP Live Streaming(HLS)

6. 安装 nginx-rtmp-module

  1. github 上下载包

  2. 解压到指定目录

  3. 编译安装到 nginx 中

    # 第一步
    ./configure --add-module=/Users/johnxu/package/NRM --prefix=/Users/johnxu/package/nginx-1.16.1/nginx --with-debug
    
    # 第二步
    make & make install
    

7. 推流的使用

RTMP 的推流方式

1. 基本使用

rtmp {
  server {
    listen 1935;
    application mylive {
      live on;
    }
  }
}
  • 推流端使用 obs,设置推流源为:rmp://192.168.1.5:1935/mylive,密钥为:6
  • 拉流端使用 VLC,设置拉流源为:rtmp://192.168.1.5:1935/mylive/6

HLS 的推流方式

1. 基本使用

worker_processes 1;
events {
  worker_connections 1024;
}
rtmp {
  server {
    listen 1935;
    application mylive {
      live on;
      hls on;
      hls_path /Users/johnxu/package/nginx-1.16.1/m3u8File;
    }
  }
}
http {
  include mime.types;
  default_type application/octet-stream;
  sendfile on;
  keepalive_timeout 65;

  server {
    listen 80;
    location /mylive_hls {
      types {
        # m3u8 type 设置
        application/vnd.apple.mpegurl m3u8;
        # ts 分片文件设置
        video/mp2t ts;
      }

      alias /Users/johnxu/package/nginx-1.16.1/m3u8File;
      add_header Cache-Control no-cache; # 禁止缓存
    }

    location /control {
      rtmp_control all;
    }
  }
}
  • 推流端可以使用 obs 设置推流源:rtmp://192.168.1.5:1935/mylive,串密钥为:44
  • 拉流端使用 VLC,设置网络地址为:http://192.168.1.5:1935/mylive/44.m3u8

8. 推流的其他配置

8.1 录制功能

rtmp {
  server {
    listen 1935;
    application mylive {
      live on;
      # 以下配置是用于开启 HLS 推流用的
      hls on;
      hls_path /Users/johnxu/package/nginx-1.16.1/m3u8File;
      # 以上配置

      # 以下配置是实现录制直播配置
      hls_fragment 2s;
      hls_playlist_length 16s;
      recorder myRecord {
        record all manual; # all:录制音频和视频, manual:手动记录和关闭录制(默认自动)
        record_suffix _.flv; # 用于设置录制文件输出的文件名
        record_path /tmp/rec; # 用于设置录制文件的输出路径
        # recort_unique on; # 用于将当前时间戳添加到已被记录的文件中,避免在每次产生新记录时
      }
      # 开启录制:http://127.0.0.1/control/record/start?app=mylive&name=77&rec=myRecord
      # 停止录制:http://127.0.0.1/control/record/stop?app=mylive&name=77&rec=myRecord
      # 以上配置
    }
  }
}
  • 开启录制:http://127.0.0.1/control/record/start?app=mylive&name=77&rec=myRecord
  • 停止录制:http://127.0.0.1/control/record/stop?app=mylive&name=77&rec=myRecord

8.2 配置 control

.
.
.
server {
  .
  .
  .
  location /control {
    rtmp_control all;
  } 
  .
  .
  .
}
.
.
.

8.2.1可以使用 drop 命令操作拉流和推流

1. 踢出推流用户

http://192.168.1.5/control/drop/publisher?app=mylive&name=77

2. 踢出全部拉流用户

http://192.68.1.5/control/drop/subscriber?app=mylive&name=77

3. 根据 IP 踢出拉流用户

http://192.168.1.5/control/drop/client?app=mylive&name=77&addr172.26.22.4

4. 根据序号踢出拉流用户

http://192.168.1.6/control/drop/client?app=mylive&name=77&clientid=1

8.2.2 redirect 命令

1. 重定向推流地址到 newname

http://192.168.1.5/control/redirect/publisher?app=mylive&newname=66

2. 重定向所有拉流用户到新流

http://192.168.1.5/control/redirect/subscriber?app=mylive&newname=66

8.3 配置数据统计模块

http {
  server {
    location /liveStat {
      rtmp_stat all;
      rtmp_stat_stylesheet stat.xsl;
    }
    location /stat.xsl {
      root /download/NRM;
    }
  }
}
  • 通过地址访问:http://192.168.1.5/liveStat

9. 配置文件如下

worker_processes 1;
events {
  worker_connections 1024;
}
rtmp {
  server {
    listen 1935;
    application mylive {
      live on;
      sync 10ms;
      # 以下配置是用于开启 HLS 推流用的
      hls on;
      hls_path /Users/johnxu/package/nginx-1.16.1/m3u8File;
      # 以上配置

      # 以下配置是实现录制直播配置
      hls_fragment 2s;
      hls_playlist_length 16s;
      recorder myRecord {
        record all manual;
        record_suffix _.flv;
        record_path /tmp/rec;
      }
      # 开启录制:http://127.0.0.1/control/record/start?app=mylive&name=77&rec=myRecord
      # 停止录制:http://127.0.0.1/control/record/stop?app=mylive&name=77&rec=myRecord
      # 以上配置
    }
  }
}
http {
  include mime.types;
  default_type application/octet-stream;
  sendfile on;
  keepalive_timeout 65;

  server {
    listen 80;
    location /mylive_hls {
      types {
        # m3u8 type 设置
        application/vnd.apple.mpegurl m3u8;
        # ts 分片文件设置
        video/mp2t ts;
      }

      alias /Users/johnxu/package/nginx-1.16.1/m3u8File;
      add_header Cache-Control no-cache; # 禁止缓存
    }

    location /control {
      rtmp_control all;
    }

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

    location /stat.xsl {
      root html/NRM;
    }
  }
}

安装软件中出现的问题

1. 安装 NRM 扩展的时候找不到 openssl,解决方案如下:

  1. 安装 openssl 方法,见:https://www.jianshu.com/p/c6d6a60002e4
  2. 扩展位置错误,修改方式见:https://blog.csdn.net/u013091013/article/details/53640318
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xfjpeter/article/details/106739873

智能推荐

GMSSL :SM2椭圆曲线公钥密码算法-密钥交换协议_vincy_yeha的博客-程序员信息网_sm2密钥交换协议

[email protected]目录一、密钥交换协议介绍二、密钥交换协议流程一、密钥交换协议介绍密钥交换协议是两个用户A和B通过交互的信息传递,用各自的私钥和对方的公钥来商定一个只有他们知道的秘密密钥。这个共享的秘密密钥通常用在某个对称密码算法中。该密钥交换协议能够用于密钥管理和协商。所需辅助函数:密码杂凑函数,密钥派生函数与随机数发生器。这三类辅助函数的强弱直接影响密钥交换协议的安全性。密码杂凑函数:在这部分中使用的是SM3杂凑密码算法随机数发生器:这部分需要的函数在GmSSL-m

别再用原生支付API啦!Payment集成 支付宝支付、微信支付、招商支付的PHP SDK_assasinSteven的博客-程序员信息网

原生支付固然是好,但是就是需要你自己一步一步的去搭建,封装代码等。这里这篇文章给大家讲解一下如何用第三方api支付:paymentPayment是什么?Payment是一个集成了支付宝支付、微信支付、招商支付的PHP SDK。服务端开发者将它集成到自己的项目中,可以方便的通过相同的操作方式进行各项支付操作。不再需要开发者去单独了解支付宝、微信、招商的接口文档。以发起支付举例,...

Django之Model操作汇总【ORM汇总篇九】_Burgess_zheng的博客-程序员信息网_orm自定义函数

上一篇:Django之Model操作之select_related和prefetch_related【ORM篇八】点击跳转目录篇:Django之model操作ORM目录篇 点击跳转下一篇:Django之Model的表类和字段对象的一些常用操作【ORM篇十】 点击跳转目录已建立完毕的类表 一.字段     字段类型     自定义无符号整数字段类型     返回值为字段在数据库中...

学习笔记(04):Flutter零基础轻松入门:从入门到实战一次学会-Flutter和其他跨平台框架对比..._abcruan的博客-程序员信息网

本套视频根据实际开发中总结出来的一些学习思路,从零开始详细讲解Flutter的基础知识点。从简到难,从浅入深,逐步带领大家了解Flutter,熟悉Flutter的组成部分,并且带领大家学习如何使用Flutter实现UI功能编写。通过对本视频的学习,你将会掌握Flutter常用组件和常用布局构建复杂布局、Flutter路由导航实现多页面构建和交互、Flutetr手势处理和动画实现动态交互效果,以及如...

JavaWeb教务管理系统(选课评教,框架SpringMvc+Hibernate)_小黑ya_的博客-程序员信息网_javaweb教务管理系统

教务管理系统javaweb项目(springmvc)运行环境: Tomcat v7.0、JDK1.7,开发环境:eclipse、Mysql运用的技术:springmvc,hibernate,spring,MySQL数据库项目代码的下载:点击打开链接下载源码一、设计结构以下是系统主要结构:1.登录(全部已实现)(1)角色登录(2)修改密码(3)注销2.学生用户(全部已实现)...

随便推点

TCP和UDP各自特点与区别_小乔只会写bug的博客-程序员信息网_tcp与udp的特点

TCP协议的特点1、面向连接的传输层协议;在数据传输之前发送方和接收方先建立连接,三次握手就是建立连接的过程,四次挥手时销毁连接的一个过程。2、可靠性传输;数据传输无差错,不重复,不丢失,按序到达。3、每一条tcp连接只能有两个端点(socket套接字),即点到点。4、全双工通信;通信双方的应用进程随时都可以向对方发送数据,因为两端都设有发送和接收缓存。(全双工:同一时刻A可以发给B,B也可以发给A;半双工:A发给B的时候,B不能发给A,B发给A时同理)。5、面向字节流;发送方发送的数据块和接收

【Android 】零基础到飞升 | GridView(网格视图)的基本使用_A little strawberry的博客-程序员信息网_android gridview网格

2.5.2 GridView(网格视图)的基本使用本节引言:本节给大家介绍的是第二个Adapter类的控件——GridView(网格视图),见名知义,ListView是列表,GridView就是显示网格!他和ListView一样是AbsListView的子类!很多东西和ListView都是相通的,本节我们就来学习他的基本用法~1.相关属性:下面是GridView中的一些属性:android:columnWidth:设置列的宽度android:gravity:组件对其方式android:

Codeforces 991C 二分_PiscesCrab的博客-程序员信息网

C. Candiestime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputAfter passing a test, Vasya got himself a box of nn candies. He decided to eat an equal a...

国内外主流云主机 | 对比分析 - 阿里云与Digital Ocean_ljzz_的博客-程序员信息网_海会主机和阿里云哪个好

本章目录话前小唠福利1-阿里云在家“实践”计划福利2 -Github-education-pack学生包服务入题:阿里云分析1.申请注意事项:2.学生优惠:3.WordPress服务:Github学生包-Digital Ocean分析1.申请流程:2.申请注意事项:3.学生优惠:4.WordPress服务:总结话前小唠hello,大家好!我是一个每天上机前爱喷发胶整理发型的大学生ljzz_。...

误差反向传播算法_xuechanba的博客-程序员信息网_误差反向传播

通过单个感知机或者单层神经网络只能够实现线性分类的问题,而多层神经网络可以解决非线性分类问题。神经网络中的模型参数,是神经元模型中的连接权重以及每个功能神经元的阈值,这些模型参数并不是我们人工设计或者指定的,而是通过算法自动学习到的。和其他机器学习算法一样,神经网络的训练,就是给定训练集,通过学习算法,确定学习参数的过程。可以直接使用梯度下降法需要计算损失函数的梯度,在没有隐含层的单层神经网络中,可以通过计算直接得到梯度。在多层神经网络中,上一层的输出是下一层的输入,要在网络中的每一层计算损失函

大厂java程序员教你面试如何介绍项目经验_xy29981的博客-程序员信息网_java面试项目经验怎么说

本文包含如下的内容。1 在Java面试时,如何介绍项目经验?2 在介绍项目经验时,如何引导面试官后继的提问。3 再进一步给出在面试前系统准备面试问题以及面试亮点的技巧。本人于3年前写的博文,如何在面试中介绍自己的项目经验,经过大家的捧场,陆续得到了将近7万个点击量,也得到了众多网站公众号的转载,不过自己感觉,这篇文章更多的是偏重于方法,没有具体给到Java方面相关的说辞。三年过去了,随着本人面试官经验的积累,也随着技术的进步,本人就用适合当下2021年Java初级开发的面试场景,改写

推荐文章

热门文章

相关标签