nginx rtmp module 代码详解 各模块主要功能

https://blog.csdn.net/u012618915/article/details/82253811

ngx_rtmp_dash_module http模块里播放MPEG-DASH相关处理 
ngx_rtmp_mp4_module 主要支持rtmp MP4这块点播相关功能,支持seek操作 
ngx_rtmp_flv_module 主要是flv文件格式的点播相关功能,支持seek操作 
ngx_rtmp_play_module rtmp点播相关,支持本地,远程两种方式点播,远程点播http方式,支持flv,mp4两种格式 
ngx_rtmp_record_module 视频录制默认是flv格式, 支持按时间,按文件大小,帧个数录制文件 
ngx_rtmp_hls_module rtmp中rtmp转hls协议处理 
ngx_rtmp_mpegts rtmp中rtmp转ts协议处理 
ngx_rtmp_handshake 主要是是三次握手相关 
ngx_rtmp_handler 主要是数据接收recv,发送send,ping命令相关 
ngx_rtmp_init 初始化连接相关的信息 
ngx_rtmp_core_module 主要是rtmp协议核心配置相关. 
ngx_rtmp rtmp配置解析,rtmp事件框架的初始化信息,注册事件回调函数(协议handler,amfhandler) 
ngx_rtmp_receive 主要是rtmp协议数据接收这块 
ngx_rtmp_send 数据发送这块,以及各种rtmp消息包发送封装的函数 
ngx_rtmp_live_module 主要处理接收音视频消息数据,以及ngx_rtmp_live_av中进行数据分发,从接收到发送给每个其他session 
ngx_rtmp_netcall_module 主要是http请求相关部分 
ngx_rtmp_notify_module 主要rtmp发送http请求,通知作用主要监听connect,disconnect,play,publish,close,record_done等相关事件 
ngx_rtmp_relay_module 主要是rtmp提供回源请求拉流,以及转推,监听_result,_error, onStatus 
ngx_rtmp_stat_module 主要是rtmp流状态信息可以输出到本地文件 
ngx_rtmp_shared 主要是rtmp协议内存管理方面,其中用到了引用计数来管理内存 
ngx_rtmp_bandwidth 主要是rtmp协议的带宽计费 
ngx_rtmp_cmd_module rtmp消息命令相关play,publish 
ngx_rtmp_codec_module rtmp音视频编解码信息相关 
ngx_rtmp_control_module 主要是一些控制接口,录制开始/暂停,支持record,query,drop相关的接口 
ngx_rtmp_eval 主要提供一些变量替换的函数接口,有内存泄漏 
ngx_rtmp_amf ngx_rtmp_bitop 主要是封装读,写amf包信息 
ngx_rtmp_access_module 监听play,publish事件,对ip做检查访问 
ngx_rtmp_auto_push_module 多进程方案,推流来时,自动推流到其他worker进程 
ngx_rtmp_exec_module 主要监听publish,play,close,record_done事件,然后进行执行脚本进行相应的业务,如转码 
ngx_rtmp_limit_module 主要监听connect以及disconnect事件,通过计算连接数量来限制连接个数 
ngx_rtmp_log_module 主要是rtmp日志相关,连接断开disconncet事件的时候,输出访问日志相关

  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

    1. 对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

    2. 命令的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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值