nginx rtmp module 代码详解 各模块主要功能
ngx_rtmp_dash_module http模塊里播放MPEG-DASH相關(guān)處理
ngx_rtmp_mp4_module 主要支持rtmp MP4這塊點播相關(guān)功能,支持seek操作
ngx_rtmp_flv_module 主要是flv文件格式的點播相關(guān)功能,支持seek操作
ngx_rtmp_play_module rtmp點播相關(guān),支持本地,遠(yuǎn)程兩種方式點播,遠(yuǎn)程點播http方式,支持flv,mp4兩種格式
ngx_rtmp_record_module 視頻錄制默認(rèn)是flv格式, 支持按時間,按文件大小,幀個數(shù)錄制文件
ngx_rtmp_hls_module rtmp中rtmp轉(zhuǎn)hls協(xié)議處理
ngx_rtmp_mpegts rtmp中rtmp轉(zhuǎn)ts協(xié)議處理
ngx_rtmp_handshake 主要是是三次握手相關(guān)
ngx_rtmp_handler 主要是數(shù)據(jù)接收recv,發(fā)送send,ping命令相關(guān)
ngx_rtmp_init 初始化連接相關(guān)的信息
ngx_rtmp_core_module 主要是rtmp協(xié)議核心配置相關(guān).
ngx_rtmp rtmp配置解析,rtmp事件框架的初始化信息,注冊事件回調(diào)函數(shù)(協(xié)議handler,amfhandler)
ngx_rtmp_receive 主要是rtmp協(xié)議數(shù)據(jù)接收這塊
ngx_rtmp_send 數(shù)據(jù)發(fā)送這塊,以及各種rtmp消息包發(fā)送封裝的函數(shù)
ngx_rtmp_live_module 主要處理接收音視頻消息數(shù)據(jù),以及ngx_rtmp_live_av中進(jìn)行數(shù)據(jù)分發(fā),從接收到發(fā)送給每個其他session
ngx_rtmp_netcall_module 主要是http請求相關(guān)部分
ngx_rtmp_notify_module 主要rtmp發(fā)送http請求,通知作用主要監(jiān)聽connect,disconnect,play,publish,close,record_done等相關(guān)事件
ngx_rtmp_relay_module 主要是rtmp提供回源請求拉流,以及轉(zhuǎn)推,監(jiān)聽_result,_error, onStatus
ngx_rtmp_stat_module 主要是rtmp流狀態(tài)信息可以輸出到本地文件
ngx_rtmp_shared 主要是rtmp協(xié)議內(nèi)存管理方面,其中用到了引用計數(shù)來管理內(nèi)存
ngx_rtmp_bandwidth 主要是rtmp協(xié)議的帶寬計費
ngx_rtmp_cmd_module rtmp消息命令相關(guān)play,publish
ngx_rtmp_codec_module rtmp音視頻編解碼信息相關(guān)
ngx_rtmp_control_module 主要是一些控制接口,錄制開始/暫停,支持record,query,drop相關(guān)的接口
ngx_rtmp_eval 主要提供一些變量替換的函數(shù)接口,有內(nèi)存泄漏
ngx_rtmp_amf ngx_rtmp_bitop 主要是封裝讀,寫amf包信息
ngx_rtmp_access_module 監(jiān)聽play,publish事件,對ip做檢查訪問
ngx_rtmp_auto_push_module 多進(jìn)程方案,推流來時,自動推流到其他worker進(jìn)程
ngx_rtmp_exec_module 主要監(jiān)聽publish,play,close,record_done事件,然后進(jìn)行執(zhí)行腳本進(jìn)行相應(yīng)的業(yè)務(wù),如轉(zhuǎn)碼
ngx_rtmp_limit_module 主要監(jiān)聽connect以及disconnect事件,通過計算連接數(shù)量來限制連接個數(shù)
ngx_rtmp_log_module 主要是rtmp日志相關(guān),連接斷開disconncet事件的時候,輸出訪問日志相關(guān)
對消息的處理
ngx_rtmp_receive_message里面,對消息的頭部h的type做判斷之后,會調(diào)用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
對amf命令的處理
cmcf->amf_hash是存放amf命令名稱與處理函數(shù)對應(yīng)關(guān)系的地方。每個模塊會在postconfiguration的時候,將要處理的命令與處理函數(shù)的對應(yīng)關(guān)系放到cmcf->amf這個array里面
cmcf->amf會在配置解析完成后,統(tǒng)一放到cmcf->amf_hash中。
cmcf->amf_hash在ngx_rtmp_receive.c的ngx_rtmp_amf_message_handler函數(shù)中拿出來調(diào)用。而ngx_rtmp_amf_message_handler也是1中注冊的一種消息處理函數(shù),專門用于處理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
命令的chain_handler
一個模塊xxx,在postconfiguration的時候,對于一個命令yyy,可能會定義一個函數(shù)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;
總結(jié)
以上是生活随笔為你收集整理的nginx rtmp module 代码详解 各模块主要功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx丢弃http包体处理
- 下一篇: 流媒体(视频)服务器调研