热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

支持HTTPFLV方式直播的开源模块nginxhttpflvmodule

nginx-http-flv-module是在nginx-rtmp-module基础上开发的一个直播模块。感谢Arut创造了nginx-rtmp-module,它是Nginx的一个

nginx-http-flv-module是在nginx-rtmp-module基础上开发的一个直播模块。
感谢Arut创造了nginx-rtmp-module,它是Nginx的一个优秀的第三方模块,可以用来直播,支持RTMP,HLS和DASH方式直播,还支持调用第三方软件进行转码,录制视频等功能,由于依托Nginx,性能也比较高。但是美中不足的地方也不少,例如首屏时间长,不支持HTTP-FLV方式直播,不支持虚拟主机(vhost)功能,省略listen配置无法接受连接,有很多很明显的bug等问题。
nginx-http-flv-module解决了上述的问题。当然,还有些bug还有待修复。具体使用方法请参考说明文件:

  • 英语README
  • 中文README.CN

为什么选择Nginx作为支持HTTP-FLV方式直播的服务器呢?因为Nginx的Web服务器功能对HTTP协议的支持非常完善,Nginx的性能优秀,经过了很多场景的检验。另外,Nginx本身对第三方软件的依赖较少,非常易于部署。这些都使得它成为HTTP-FLV方式直播服务器不可多得的选择。

nginx-http-flv-module的功能

  1. 兼容nginx-rtmp-module所有功能
  2. 支持HTTP-FLV方式的直播
  3. 支持GOP缓存,以减少首屏时间
  4. 支持虚拟主机功能
  5. 可以省略listen配置项而不影响基本功能
  6. 修复nginx-rtmp-module已知的bug

功能简介

  1. 兼容nginx-rtmp-module的所有功能,详细说明参考nginx-rtmp-module的Wiki。
  2. 支持HTTP-FLV方式的直播
    支持的播放器有VLC,OBS和flv.js等,只需要输入如下地址即可:

    http://yourdomain[:httpport]/dir?[rtmpport=xxx&]app=yyy&stream=zzz

    其中httpport是Nginx的配置文件中http块中监听的端口,如果这个端口是80,那么可以省略不写;rtmpport是Nginx的配置文件中rtmp块中监听的端口,如果这个端口是1935,那么可以省略不写。dir是Nginx的配置文件中http块中location后的路径。参数app和stream见下文的推流一节说明。
    nginx-http-flv-module也支持HTTPS-FLV方式的直播。

  3. 支持GOP缓存,以减少首屏时间
    只需要在rtmp块中的application块中添加如下配置项即可:

    gop_cache on;

    现在的代码中只缓存两个GOP,如果需要修改GOP缓存个数,可以自行修改代码,但是不建议将GOP缓存的个数设置太大,因为发送GOP缓存可能需要很多次I/O操作,可能耗费比较多的时间,从而影响整个服务器的性能。

  4. 支持虚拟主机功能
    nginx-rtmp-module不支持虚拟主机功能。那什么是虚拟主机功能呢?假设有一台服务器,其IP地址是192.168.1.110,我配置了一个DNS服务器,将两个域名www.testa.com和www.testb.com都指向192.168.1.110,那么对于Web服务,我可以针对这两个域名配置不同的Web页面,通过不同的域名访问不同的Web页面,但其实这两个不同的服务都指向同一台服务器。这两个域名对应同一个IP地址就是虚拟主机功能。与http配置一样,nginx-http-flv-module通过server_name来指定域名,也支持前向通配,后向通配和完全匹配:

    server {
    server_name *.test.com; #前向通配,匹配blog.test.com/login.test.com等
    ...
    }
    server {
    server_name www.test.*; #后向通配,匹配www.test.org/www.test.com等
    ...
    }
    server {
    server_name www.test.com; #完全匹配
    }

    注意:虚拟主机功能在多进程模式下还有问题。

  5. 可以省略listen配置项而不影响基本功能
    这个略,大家可以试试使用nginx-rtmp-module时,在rtmp块中不指定listen,然后推流和播放会不会出现问题。
  6. 修复nginx-rtmp-module已知的bug
    大多是一些比较明显的错误,如指令对应的宏写错了,消息个数计算错误等。

推流

为了简便起见,假设不使用比较复杂的选项,这里以ffmpeg为例:

ffmpeg -re -i media_file -vcodec copy -acodec copy -f flv rtmp://yourdomain/app/stream

上文中HTTP-FLV的URL中的app和stream与这里的app和stream对应,它们都是RTMP协议中的概念。
也可以使用OBS推流,这里不再详述。

nginx-http-flv-module性能如何?

在我的笔记本上(ThinkPad T410,Intel Core i5 M480,4G内存,Debian 7.11)压力测试,单进程(多进程还有些问题没解决)200推流和1000播放没有问题。

有人用nginx-http-flv-module吗?

答案是有的。我知道商用的有不下10家,规模比较大的一家是CDN厂商,另一家是网络电视厂商。另外,据网友反馈,国外也有网站在用这个模块。还有华为也打算使用本模块,这是我已知的最大的一个对本模块感兴趣的厂商了。
欢迎大家试用nginx-http-flv-module,也欢迎反馈bug和提交pr。
最后贴两张调试nginx-http-flv-module时的测试截图:

RTMP和HTTP-FLV测试截图
《支持HTTP-FLV方式直播的开源模块nginx-http-flv-module》

flv.js测试截图
《支持HTTP-FLV方式直播的开源模块nginx-http-flv-module》


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在CentOS 7.x上进行端口映射配置的方法,通过修改内核和配置防火墙实现端口映射。作者分享了自己使用华为服务器进行端口映射的经验,发现网速比直连还快且稳定。详细的配置过程包括开启系统路由模式功能、设置IP地址伪装、设置端口映射等。同时,还介绍了如何监听本地端口的tcp请求,以及删除规则和开放的端口的方法。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
author-avatar
唲戲2502873263
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有