Nginx
文章平均质量分 88
龙--技术总结分享
long
展开
-
webrtc twcc接收端处理在Nginx RTC SFU 服务端的实现
twcc简介TWCC全称是Transport wide Congestion Control,是webrtc的最新的拥塞控制算法。其原理是在接收端保存数据包状态,然后构造RTCP包反馈给发送端,反馈信息包括包到达时间、丢包状态等;在发送端进行带宽估计,进行拥塞控制。发送方带宽估计有什么好处?谷歌解释的理论是,通过这种方式,所有的决策逻辑都在一个地方(发送方),因此可以轻松测试新算法,因为你不依赖两个端点。老实说,考虑到浏览器自动更新,我不认为这一点有什么大的优势,但它肯定更干净,即使它在带宽使用方面原创 2022-03-13 16:23:18 · 6601 阅读 · 0 评论 -
Nginx RTC服务SFU级联的实现
前言级联解决的主要问题是媒体分发。横向扩展:在大主播场景下,一个主播对应成千上万的观众,服务器的性能和带宽限制了观众人数的上限,为了能够支持更多的观众,需求从单个服务器扩展到集群服务器。分发质量:同样对于大规模观众来说,不同的观众分布在不同的地域,可能出现跨国或跨省传输,还有就是不同的观众对应的电信网络运营商不同,也会影响媒体分发传输质量,所以需要观众可以就近接入高质量的服务器节点。这些不同的服务器节点组成了服务器集群,服务器间的媒体分发采用级联的形式。由于网上介绍为什么需要级联SFU的文章已经很原创 2022-01-16 21:28:42 · 4423 阅读 · 0 评论 -
Nginx RTMP源码分析--record module
简介本章介绍RTMP的录制模块。Nginx RTMP中,直播流可以被录制为FLV格式的文件。录制模块配置解析record指令指定了应该被准确录制的内容:off:不开启录制;all:音频和视频录制;audio:只录制音频video:只录制视频;keyframes:只录制视频关键帧;manual:从不自动开启录制,使用录制接口控制开始/结束录制。record_path指定录制的FLV文件的路径record_path /tmp/rec;record_suffix设置录制文件后缀名原创 2021-08-06 22:41:45 · 1014 阅读 · 0 评论 -
Nginx RTMP源码分析--stat module
简介RTMP的静态模块和其他的模块不太一样,其是Nginx HTTP模块,它应该被设置在http{}块中。静态模块的主要作用是获取当前RTMP服务中的直播流状态,包括推流和拉流的具体信息。可以通过配置rtmp_stat_stylesheet,使获取到的静态信息以XML格式显示,这样更具可视化。源码分析接收到HTTP请求后的主要处理函数是ngx_rtmp_stat_handler。我们就来看看这个函数的具体实现逻辑。 slcf = ngx_http_get_module_loc_conf(r,原创 2021-08-06 22:39:36 · 681 阅读 · 2 评论 -
Nginx RTMP源码分析--auto_push_module
简介本章我们来看看RTMP服务的auto_push模块。我们知道当一个推流客户端将一路直播流上行推到RTMP直播服务器上,此时由一个worker进程负责接收上行推流数据的。如果我们在nginx.conf文件中配置开启多个worker,那么当有用户进行播放拉流的时候,其创建的socket连接是随机分配到一个worker上的,并不能保证一定是在我们的接收推流的进程上。而auto_push的主要功能是接收推流的进程将其接收到上行数据,再转发给所有的兄弟worker进程一份。这样就可以保证所有的worker进程上原创 2021-08-06 22:38:08 · 939 阅读 · 2 评论 -
Nginx RTMP源码分析--ngx_rtmp_control_module
ngx_rtmp_control_moduleRTMP控制模块主要包括录制指令、关闭指令、重定向指令三个控制命令。和其他RTMP有所不同的地方是:RTMP控制模块是注册在HTTP模块下的,它是通过在HTTP配置域下进行控制配置,并通过HTTP Get请求来实现外部对RTMP服务的控制功能。源码分析注册HTTP回调static char *ngx_rtmp_control(ngx_conf_t *cf, ngx_command_t *cmd, void *conf){ ngx_http_c原创 2021-08-06 22:35:05 · 782 阅读 · 0 评论 -
Nginx RTMP源码分析--ngx_rtmp_codec_module
本章主要是关于RTMP直播系统中音视频编解码模块的介绍。预处理static ngx_rtmp_module_t ngx_rtmp_codec_module_ctx = { NULL, /* preconfiguration */ ngx_rtmp_codec_postconfiguration, /* postconfiguration */ NULL,原创 2021-08-06 22:33:13 · 520 阅读 · 0 评论 -
Nginx RTMP源码分析--ngx_rtmp_notify_module源码分析
ngx_rtmp_notify_module 简介及配置ngx_rtmp_notify_module的主要功能是上报RTMP Session的状态。在直播系统中非常重要,我们可以通过notify事件上报,来实时监控直播流状态。并且还可以根据on_play和on_publish的重定向功能,做直播服务器集群内部的直播流调度功能。on_connect设置连接回调HTTP的请求。当接收到客户端connect指令,会创建一个同步的HTTP请求,在请求返回前,进程被挂起。如果HTTP返回2xx,会继续RTMP原创 2020-05-24 23:00:49 · 880 阅读 · 0 评论 -
Nginx RTMP源码分析--HTTP-FLV的实现
HTTP-FLV 协议简介HTTP-FLV:通过HTTP协议传输FLV封装格式的流媒体数据。HTTP协议中content-length字段表明客户端需要接收的body长度,在HTTP-FLV中,媒体服务器不设置content-length,客户端会持续接收数据,直到链接断开。HTTP-FLV相比RTMP协议的优势:防火墙限制:部分防火墙会屏蔽RTMP的1935端口,但是HTTP协议不会被屏蔽。简单:HTTP是最广泛的协议。调度:根据默认的HTTP 302即可实现拉流调度。在SRS中有针对RTMP原创 2020-05-09 21:57:25 · 1064 阅读 · 0 评论 -
Nginx RTMP源码分析--ngx_rtmp_live_module源码分析之音视频数据分发
直播音视频数据分发我知道,在直播过程中会有成千上万的用户同时观看,对应到Nginx RTMP到实现中,就是支持一个publisher,同时有多个subscriber进行拉流播放。本节我们将重点介绍ngx_rtmp_live_module模块是如何实现将直播音视频数据分发给多个subscriber的。注册音视频数据回调处理函数static ngx_int_tngx_rtmp_live_pos...原创 2020-04-10 15:40:35 · 985 阅读 · 0 评论 -
Nginx RTMP源码分析--ngx_rtmp_live_module源码分析之添加stream
ngx_rtmp_live_module 概述ngx_rtmp_live_module模块负责直播音视频数据的转发。它将从publisher推流上来的音视频数据,转发给每个player进行播放。本章主要包括以下两个方面:live module数据结构分析Nginx RTMP服务器支持多个直播同时推流,并且支持每个直播有多个客户端进行播放观看。那么RTMP是如何将这些直播流组织在一起的?直播...原创 2020-04-08 15:48:11 · 1620 阅读 · 1 评论 -
Nginx RTMP源码分析--GOP的实现
nginx rtmp module的默认实现中,不支持gop缓存。我们可以自己进行开发,实现的主要原理是:当遇到关键帧时,清空旧的gop缓存并开始缓存新的帧数据;当play时,先将缓存的gop发送给对方,然后开始正常的发送的逻辑。具体逻辑如下:(这里只列出了主要的流程,并不是全部的代码实现)初始化在ngx_rtmp_session_t增加gop相关的字段:typedef struct {...原创 2019-10-15 18:56:13 · 2060 阅读 · 0 评论 -
Nginx RTMP源码分析--直播流的存储结构
ngx_rtmp_blockngx_rtmp_add_portsaddr.ctx=listen.ctx初始化connectionNGX_RTMP_CONNECTfind application & set app_confconnection和session绑定read-handler=ngx_rtmp_recv,write-handler=ngx_rtmp_sendpublish=1p...原创 2019-10-02 15:43:12 · 1138 阅读 · 0 评论 -
Nginx源码分析--进程间通信--Signal篇
Nginx进程间通信–Signal篇Nginx使用信号来管理master进程和worker进程。信号Signal的概念信号是软件中断。很多比较重要的应用程序都需要处理信号。信号提供了一种处理异步事件的方法。 当某个信号出现时,可以告诉内核按下列3种方式之一进行处理:1、忽略信号。有两种信号不能被忽略,它们是SIGKILL和SIGSTOP,原因是它们向内核和超级用户提供了使进程终止或停止的...原创 2019-10-02 15:10:44 · 912 阅读 · 0 评论 -
Nginx源码分析--进程间通信--Channel篇
Nginx进程间通信–Channel篇Nginx中全局变量ngx_processes数组,存储所有进程的信息。work进程在创建时,从master进程继承了ngx_processes数组。worker_processes=4,由于worker是顺序创建的,当work2创建时,它可以从master继承ngx_processes,从而得知worker1已经创建成功;但是在worker1创建的时候,w...原创 2019-09-30 15:09:48 · 1123 阅读 · 0 评论 -
Nginx源码分析--平滑升级原理
一、Nginx平滑升级指令Nginx的MakeFile文件:default: buildclean: rm -rf Makefile objsbuild: $(MAKE) -f objs/Makefileinstall: $(MAKE) -f objs/Makefile installmodules: ...原创 2019-09-27 15:49:31 · 454 阅读 · 0 评论