nginx-rtmp-module

基于nginx-rtmp-module模块实现的基于HTTP协议的FLV直播模块(nginx-http-flv-module)

时间秒杀一切 提交于 2021-01-11 04:06:30
近几年直播行业火爆,开源的直播软件解决方案有 SRS (Simple-RTMP-Server)和 nginx-rtmp-module ,前者是国人发起的一个优秀的开源项目,目前国内很多公司都使用它作为直播解决方案,由C++编写;后者依赖 Nginx ,以第三方模块的方式提供直播功能,由C编写。SRS采用多线程方式,性能优秀,经受住了众多场景的考验,但是SRS3已经闭源(更正,中间一段时间闭源,现在又开源了);nginx-rtmp-module是采用多进程方式,Nginx的性能优秀,但是据网友测试,nginx-rtmp-module的性能不如SRS,并且nginx-rtmp-module的作者已经很久没有更新版本了,支持的功能也有限,例如不支持HTTP方式的FLV直播,而这是国内直播行业普遍采用的方式;不支持虚拟主机功能,在有多个IP地址的主机上无法根据域名选择不同配置;还有饱受诟病的播放响应延迟时间很长的问题(即俗称的不能秒播)等。 我在nginx-rtmp-module的基础上实现了基于HTTP方式的FLV直播功能,支持GOP缓存,减少播放响应延迟时间;支持流式和Transfer-Encoding: chunked两种HTTP响应格式;支持根据域名匹配不同配置的虚拟主机功能;修复nginx-rtmp-module没有listen配置项时,推流失败的问题;解决nginx-rtmp

201902CentOS7_直播服务搭建_nginx_nginx-http-flv-module

北城余情 提交于 2021-01-11 03:34:17
1、介绍 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还有待修复。具体使用方法请参考说明文件: 为什么选择Nginx作为支持HTTP-FLV方式直播的服务器呢?因为Nginx的Web服务器功能对HTTP协议的支持非常完善,Nginx的性能优秀,经过了很多场景的检验。另外,Nginx本身对第三方软件的依赖较少,非常易于部署。这些都使得它成为HTTP-FLV方式直播服务器不可多得的选择。 1.1 nginx-http-flv-module的功能 兼容nginx-rtmp-module所有功能,基于 nginx-rtmp-module 的流媒体服务器。 支持HTTP-FLV方式的直播 支持GOP缓存,以减少首屏时间 支持虚拟主机功能

nginx rtmp服务器搭建

血红的双手。 提交于 2020-10-10 00:31:39
1.获取nginx-rtmp-module git clone https://github.com/arut/nginx-rtmp-module.git 编译添加模块 configure文件目录在nginx根目录下 添加这个--with-cc-opt="-Wimplicit-fallthrough=0" 否则报错 sudo ./configure --prefix=/usr/local/nginx --with-cc-opt="-Wimplicit-fallthrough=0" --add-module=/home/soap/rtmp/nginx-rtmp-module/ 4.修改nginx.conf http模块添加配置 location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { root /home/soap/rtmp/nginx-rtmp-module/; } location /hls { #这里也是需要添加的字段。 types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /home/soap/rtmp/hls; add_header Cache-Control no-cache;

FFmpeg Failed to update header问题解决

99封情书 提交于 2020-08-18 11:53:28
场景 nginx集成nginx-rtmp-module模块,使用FFmpeg动态库推送视频到nginx时报错 , [flv @ 031E5CE0] Failed to update header with correct duration. [flv @ 031E5CE0] Failed to update header with correct filesize. 解决 在写文件头的时候,指定 -flvflags no_duration_filesize 参数 AVDictionary * opts = nullptr; av_dict_set(&opts, "flvflags", "no_duration_filesize", 0); int e = avformat_write_header(m_oFmtCtx, opts ? &opts : NULL); 来源: oschina 链接: https://my.oschina.net/u/4267707/blog/4503532

Nginx搭建flv视频点播服务器

感情迁移 提交于 2020-08-17 19:08:08
前一段时间使用Nginx搭建的多媒体服务器只能在缓冲过的时间区域内拖放, 而不能拖放到未缓冲的地方. 这就带来了一个问题: 如果视频限速的速率很小, 那么客户端观看视频时肯定不流畅, 而且用户不能向前拖放, 用户体验很不好. 如果视频限速的速率很大或者不限速, 服务器是承受不了的, 特别是在某个热门视频高并发访问的情况下, 而且客户端浏览器也在快速的从服务器接收数据, 同样会造成客户端视频播放不流畅的问题, 对服务器的性能和网络带宽都是很大的挑战. 所以很有必要将实现视频服务器的点播功能, 这样既可以对视频进行限速, 避免大量不必要数据在网上的传送, 又可以改善用户体验. 本文主要参考了 [1] 的实现, 期间会遇到各种意想不到问题, 然后从网上搜索到了解决方法. 本次搭建使用的Nginx版本是1.4.1, jwplayer的版本是6.6. 资料: HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议。 HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。 一 准备 搭建点播服务器需要如下几个模块: nginx_mod_h264_streaming: 使nginx支持h264编码的视频 http_flv

移动直播技术秒开优化经验

白昼怎懂夜的黑 提交于 2020-08-17 00:47:26
转自: https://www.toutiao.com/i6278412629417394689 徐立,七牛创始合伙人兼产品副总裁,负责七牛直播云的整体研发,是国内 Go / Docker / Container 技术早期布道者,Go / Containers / Distributed Systems 技术的忠实爱好者和实践者。曾合著国内第一本 Go 语言图书《Go 语言编程》,翻译《Go 语言程序设计》。 现今移动直播技术上的挑战要远远难于传统设备或电脑直播,其完整的处理环节包括但不限于:音视频采集、美颜/滤镜/特效处理、编码、封包、推流、转码、分发、解码/渲染/播放等。 直播常见的问题包括 主播在不稳定的网络环境下如何稳定推流? 偏远地区的观众如何高清流畅观看直播? 直播卡顿时如何智能切换线路? 如何精确度量直播质量指标并实时调整? 移动设备上不同的芯片平台如何高性能编码和渲染视频? 美颜等滤镜特效处理怎么做? 如何实现播放秒开? 如何保障直播持续播放流畅不卡顿? 本次分享将为大家揭开移动直播核心技术的神秘面纱。 视频、直播等基础知识 什么是视频? 首先我们需要理解一个最基本的概念:视频。从感性的角度来看,视频就是一部充满趣味的影片,可以是电影,可以是短片,是一连贯的视觉冲击力表现丰富的画面和音频。但从理性的角度来看,视频是一种有结构的数据,用工程的语言解释

Nginx+nginx-rtmp-module的HLS流媒体服务器部署

耗尽温柔 提交于 2020-08-05 07:58:18
知识准备 hls是Apple推出的直播协议,是通过视频流切片成文件片段来直播的。客户端首先会通过HTTP请求一个m3u8文件,里面会有不同码率的流,或者直接是ts文件列表,通过给出的ts文件地址去依次播放。在直播的时候,客户端会不断请求m3u8文件,检查ts列表是否有新的ts切片。这种方式的实时性较差,不过优势是H5、IOS、Android都原生支持。 在nginx.conf中配置 推送的数据会保存在F:/hls,设置分片和时间段 rtmp { server { listen 1935;#监听端口,若被占用,可以更改 chunk_size 4000;#上传flv文件块儿的大小 application hls{ live on; hls on; hls_path "F:/hls/";#视频流文件目录 hls_fragment 1s;#没有生效 hls_playlist_length 30s; hls_nested on; #默认是off。打开后的作用是每条流自己有一个文件夹 hls_cleanup off;#不清理ts } } } 在http中的server添加m3u8数据类型的点播配置 http { server { listen 80; server_name localhost; location /hls { #这里也是需要添加的字段。 types { application

nginx-rtmp之直播视频流的推送

坚强是说给别人听的谎言 提交于 2020-05-05 15:15:20
  一、RTMP是 Real Time Messaging Protocol (实时消息传输 协议 )的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。   RTMP(Real Time Messaging Protocol)实时消息传送协议是 Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输 开发的开放协议。   它有多种变种:   1) RTMP 工作在TCP之上,默认使用端口1935;   2) RTMPE 在RTMP的基础上增加了加密功能;   3) RTMPT 封装在 HTTP请求 之上,可穿透 防火墙 ;   4) RTMPS 类似RTMPT,增加了TLS/SSL的安全功能;   二、上面介绍了RTMP协议主要用来干什么的,下面说明一下NGINX-RTMP主要的作用。我们在做视频流的推送的时候,一般都是采用rtmp的协议进行视频流的推送工作。而这里我们主要说道的是nginx提供的一套视频流的解决方案,主要插件为 nginx

HLS-搭建Nginx流媒体服务器

一曲冷凌霜 提交于 2020-05-05 02:03:04
Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒体服务器. 这个流媒体服务器可以支持RTMP和HLS(Live Http Stream) 从安装开始 Nginx的安装参照我之前的这个: http://blog.csdn.net/redstarofsleep/article/details/45092127 在configure的时候需要增加nginx-rtmp-module的支持,下载好nginx-rtmp-module后解压,然后nginx安装时增加这个模块(--add-module),其它都是一样的. ./configure --prefix=/usr/local/nginx --with-pcre=/home/user/pcre/pcre- 8.32 --with-zlib=/home/user/zlib/zlib- 1.2 . 8 --with-openssl=/home/user/openssl/openssl- 1.0 .1i --add-module=/home/user/nginx-rtmp-module ## Mac 系统可以使用Homebrew, Homebrew是以最简单

监控视频采集与Web直播开发全流程分析

偶尔善良 提交于 2020-04-18 04:41:14
内容概要: 摄像头 => FFmpeg => Nginx服务器 => 浏览器 从摄像头拉取rtsp流 转码成rtmp流向推流服务器写入 利用html5播放 1.开发流程 1.1 通过FFmpeg视频采集和转码   在音视频处理领域,FFmpeg基本是一种通用的解决方案。虽然作为测试我们也可以借助OBS等其他工具,但是为了更接近项目实战我们采用前者。这里不会专门介绍如何使用FFmpeg,只提供演示代码。不熟悉FFmpeg的同学可以跳过这个部分直接使用工具推流,网上的资料很多请自行查阅。 // 注册解码器和初始化网络模块 av_register_all(); avformat_network_init(); char errorbuf[ 1024 ] = { 0 }; // 异常信息 int errorcode = 0 ; // 异常代码 AVFormatContext *ic = NULL; // 输入封装上下文 AVFormatContext *oc = NULL; // 输出封装上下文 char *inUrl = " rtsp://admin:SYhr_5000@192.168.8.107:554/H264 " ; // rtsp输入URL char *outUrl = " rtmp://192.168.1.118/rtmp_live/1 " ; // rtmp输出URL