nginx rtmp代码架构1 hook点总结
1. 对消息的处理
ngx_rtmp_receive_message里面,对消息的头部h的type做判断之后, 会调用cmcf->events[h->type]里面的handler,而这些handler是模块注册的
ngx_rtmp.c里面,解析配置时,可能注册
ngx_rtmp_protocol_message_handler
ngx_rtmp_amf_message_handler
ngx_rtmp_user_message_handler
ngx_rtmp_aggregate_message_handler
2. 对amf命令的处理
cmcf->amf_hash是存放amf命令名称与处理函数对应关系的地方。每个模块会在postconfiguration的时候,将要处理的命令与处理函数的对应关系放到cmcf->amf这个array里面
cmcf->amf会在配置解析完成后,统一放到cmcf->amf_hash中。
cmcf->amf_hash在ngx_rtmp_receive.c的ngx_rtmp_amf_message_handler函数中拿出来调 用。而ngx_rtmp_amf_message_handler也是1中注册的一种消息处理函数,专门用于处理amf类型的消息
ngx_rtmp_cmd_module中注册了以下命令的处理方法:
connect
createStream
closeStream
deleteStream
publish
play
seek
pause
pauseraw
ngx_rtmp_codec_module中注册了以下命令的处理方法:
@setDataFrame
onMetaData
ngx_rtmp_relay_module中注册了以下命令的处理方法:
_result
_error
onStatus
3. 命令的chain_handler
一个模块xxx,在postconfiguration的时候,对于一个命令yyy,可能会定义一个函数ngx_rtmp_xxx_yyy来处理这个命 令,将全局的ngx_rtmp_yyy指向ngx_rtmp_xxx_yyy,并定义一个next_yyy,指向原来的ngx_rtmp_yyy
例如:
next_play = ngx_rtmp_play;
ngx_rtmp_play = ngx_rtmp_live_play;
chain handler包括这些
ngx_rtmp_connect_pt ngx_rtmp_connect;
ngx_rtmp_disconnect_pt ngx_rtmp_disconnect;
ngx_rtmp_create_stream_pt ngx_rtmp_create_stream;
ngx_rtmp_close_stream_pt ngx_rtmp_close_stream;
ngx_rtmp_delete_stream_pt ngx_rtmp_delete_stream;
ngx_rtmp_publish_pt ngx_rtmp_publish;
ngx_rtmp_play_pt ngx_rtmp_play;
ngx_rtmp_seek_pt ngx_rtmp_seek;
ngx_rtmp_pause_pt ngx_rtmp_pause;
ngx_rtmp_stream_begin_pt ngx_rtmp_stream_begin;
ngx_rtmp_stream_eof_pt ngx_rtmp_stream_eof;
ngx_rtmp_stream_dry_pt ngx_rtmp_stream_dry;
ngx_rtmp_recorded_pt ngx_rtmp_recorded;
ngx_rtmp_set_buflen_pt ngx_rtmp_set_buflen;
nginx rtmp代码架构1 hook点总结相关推荐
- 1小时学会:最简单的iOS直播推流(二)代码架构概述
最简单的iOS 推流代码,视频捕获,软编码(faac,x264),硬编码(aac,h264),美颜,flv编码,rtmp协议,陆续更新代码解析,你想学的知识这里都有,愿意懂直播技术的同学快来看!! 源 ...
- nginx rtmp 编码_基于Nginx的媒体服务器技术
国内应用比较多的开源流媒体服务器nginx-rtmp-module一直存在功能少.集群化难度大等问题.在LiveVideoStack线上分享中,PingOS 开源项目组开发工程师.UCloud RTC ...
- Nginx Rtmp Module - HLS切片和级联播放
#Nginx Rtmp Module - HLS切片和播放 1.名词解释 媒体片段文件(.ts): 媒体片段是由源站生成的,基于编码后的媒体源,并且是由一系列的 .ts 格式的文件组成,其中包含了你想 ...
- Nginx RTMP 功能研究
Nginx-RTMP功能调研 1. RTMP协议介绍...2 2.RTMP server.3 2.1当前的流媒体server.3 2.2Wowza功能...3 3.Nginx-based RTMP s ...
- ffmpeg,rtmpdump和nginx rtmp实现录屏,直播和录制
ffmpeg,rtmpdump和nginx rtmp实现录屏,直播和录制 2014年 四月 19日 周六 | tags: ffmpeg, rtmp, rtmpdump, nginx, -- (perm ...
- ffmpeg推流+NGINX(RTMP)+VLC-QT拉流(Win7)
1 简介 本文旨在在Windows 7系统上实现利用FFmpeg软件推流到部署的带RTMP模块的Nginx流媒体服务器上,在拉流端,基于VLC库的VLC-QT库实现拉流播放. 2 ffmpeg下载安装 ...
- [转]Nginx RTMP 功能研究(Nginx流媒体)
转自:http://blog.csdn.net/cccallen/article/details/8440191 看点: 1. Nginx 配置信息与使用. (支持 rtmp与HLS配置) 2 ...
- linux nginx rtmp 死机,nginx rtmp 实时直播视频流 发布者网络不稳定导致无法直播问题...
nginx rtmp 实时直播视频流 发布者网络不稳定导致无法直播问题 直播项目使用nginx搭配rtmp扩展实现实时音视频流,最近一次直播讲师在外出差,使用酒店WiFi网络,苹果笔记本,Safari ...
- 深入浅出Nginx实战与架构原理
本文主要内容如下(让读者朋友们深入浅出地理解Nginx,有代码有示例有图): 1.Nginx是什么? 2.Nginx具有哪些功能? 3.Nginx的应用场景有哪些? 4.Nginx的衍生生态有哪些? ...
最新文章
- Git Manual / Git使用手册 / Git, GitLab, Git Bash, TortoiseGit (建议全文复制到Word文档中通过导航窗格查看)...
- 解决弹出框滚动穿透的问题(问题是body也会滚动)
- 鸿蒙系统第五批公测,鸿蒙系统即将迎来二轮公测,nova机型增添其中
- spring boot地一讲
- ubuntu安装wine之后进不了系统
- 如何用计算机做出折线图,曲线图怎么做-怎样在电脑上做曲线图电脑上如何做曲线图 – 手机爱问...
- Python编程基础01:搭建Python开发环境
- Java程序员面试笔试提纲(部分)
- 数字证书产品的主题通常含有如下字段
- 西安力邦智能医疗amp;可穿戴设备沙龙--第1期---苹果HealthKit、谷歌GoogleFit来袭,智能医疗要爆发吗?...
- android tabhost的使用方法,Android TabHost组件使用方法详解
- foobar2000在线标签服务器,在Foobar2000播放器中从音乐名获取标签的技巧
- 2021-09-14TL431与LM317的区别
- layui在IE浏览器刷table刷新数据未更新
- Vue组件嵌套时生命周期函数触发顺序是什么?
- java curator_关于Curator学习过程问题
- 如何察看僵尸进程 zombie
- 基于B/S的校园餐厅网上订餐系统
- xshell编程自动备份数据库
- 计算机组成与设计 硬件/软件接口 Risc-v 版