RTMP
文章平均质量分 84
龙--技术总结分享
long
展开
-
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 · 920 阅读 · 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 · 606 阅读 · 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 · 880 阅读 · 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 · 732 阅读 · 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 · 478 阅读 · 0 评论 -
排查SRS问题记录一(RTMP推流,RTC播放卡住)
问题描述:SRS Version=4.0.126. 配置文件配置:listen 1935;max_connections 100;daemon off;srs_log_tank console;http_server { enabled on; listen 8080; dir ./objs/nginx/html;}http_api原创 2021-06-26 21:21:23 · 6793 阅读 · 2 评论 -
SRS中RTMP推流RTC播放的实现原理及函数执行流程
RTMP转RTC;或者RTC转RTMP,是通过Bridger实现的。RTMP转RTCclass SrsRtcFromRtmpBridger : public ISrsLiveSourceBridgerRTMP推流#mermaid-svg-5GDqSCrD6tqxIolT .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#merma原创 2021-06-20 23:05:23 · 1157 阅读 · 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 · 839 阅读 · 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 · 1037 阅读 · 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 · 952 阅读 · 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 · 1560 阅读 · 1 评论 -
Nginx RTMP源码分析--GOP的实现
nginx rtmp module的默认实现中,不支持gop缓存。我们可以自己进行开发,实现的主要原理是:当遇到关键帧时,清空旧的gop缓存并开始缓存新的帧数据;当play时,先将缓存的gop发送给对方,然后开始正常的发送的逻辑。具体逻辑如下:(这里只列出了主要的流程,并不是全部的代码实现)初始化在ngx_rtmp_session_t增加gop相关的字段:typedef struct {...原创 2019-10-15 18:56:13 · 2015 阅读 · 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 · 1117 阅读 · 0 评论