nginx rtmp代码架构1 hook点总结
生活随笔
收集整理的這篇文章主要介紹了
nginx rtmp代码架构1 hook点总结
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 對(duì)消息的處理?
ngx_rtmp_receive_message里面,對(duì)消息的頭部h的type做判斷之后, 會(huì)調(diào)用cmcf->events[h->type]里面的handler,而這些handler是模塊注冊(cè)的?
ngx_rtmp.c里面,解析配置時(shí),可能注冊(cè)
ngx_rtmp_protocol_message_handler
ngx_rtmp_amf_message_handler
ngx_rtmp_user_message_handler
ngx_rtmp_aggregate_message_handler
2. 對(duì)amf命令的處理?
cmcf->amf_hash是存放amf命令名稱(chēng)與處理函數(shù)對(duì)應(yīng)關(guān)系的地方。每個(gè)模塊會(huì)在postconfiguration的時(shí)候,將要處理的命令與處理函數(shù)的對(duì)應(yīng)關(guān)系放到cmcf->amf這個(gè)array里面?
cmcf->amf會(huì)在配置解析完成后,統(tǒng)一放到cmcf->amf_hash中。?
cmcf->amf_hash在ngx_rtmp_receive.c的ngx_rtmp_amf_message_handler函數(shù)中拿出來(lái)調(diào) 用。而ngx_rtmp_amf_message_handler也是1中注冊(cè)的一種消息處理函數(shù),專(zhuān)門(mén)用于處理amf類(lèi)型的消息?
ngx_rtmp_cmd_module中注冊(cè)了以下命令的處理方法:?
connect
createStream
closeStream
deleteStream
publish
play
seek
pause
pauseraw
ngx_rtmp_codec_module中注冊(cè)了以下命令的處理方法:?
@setDataFrame
onMetaData
ngx_rtmp_relay_module中注冊(cè)了以下命令的處理方法:?
_result
_error
onStatus
3. 命令的chain_handler?
一個(gè)模塊xxx,在postconfiguration的時(shí)候,對(duì)于一個(gè)命令yyy,可能會(huì)定義一個(gè)函數(shù)ngx_rtmp_xxx_yyy來(lái)處理這個(gè)命 令,將全局的ngx_rtmp_yyy指向ngx_rtmp_xxx_yyy,并定義一個(gè)next_yyy,指向原來(lái)的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;
ngx_rtmp_receive_message里面,對(duì)消息的頭部h的type做判斷之后, 會(huì)調(diào)用cmcf->events[h->type]里面的handler,而這些handler是模塊注冊(cè)的?
ngx_rtmp.c里面,解析配置時(shí),可能注冊(cè)
ngx_rtmp_protocol_message_handler
ngx_rtmp_amf_message_handler
ngx_rtmp_user_message_handler
ngx_rtmp_aggregate_message_handler
2. 對(duì)amf命令的處理?
cmcf->amf_hash是存放amf命令名稱(chēng)與處理函數(shù)對(duì)應(yīng)關(guān)系的地方。每個(gè)模塊會(huì)在postconfiguration的時(shí)候,將要處理的命令與處理函數(shù)的對(duì)應(yīng)關(guān)系放到cmcf->amf這個(gè)array里面?
cmcf->amf會(huì)在配置解析完成后,統(tǒng)一放到cmcf->amf_hash中。?
cmcf->amf_hash在ngx_rtmp_receive.c的ngx_rtmp_amf_message_handler函數(shù)中拿出來(lái)調(diào) 用。而ngx_rtmp_amf_message_handler也是1中注冊(cè)的一種消息處理函數(shù),專(zhuān)門(mén)用于處理amf類(lèi)型的消息?
ngx_rtmp_cmd_module中注冊(cè)了以下命令的處理方法:?
connect
createStream
closeStream
deleteStream
publish
play
seek
pause
pauseraw
ngx_rtmp_codec_module中注冊(cè)了以下命令的處理方法:?
@setDataFrame
onMetaData
ngx_rtmp_relay_module中注冊(cè)了以下命令的處理方法:?
_result
_error
onStatus
3. 命令的chain_handler?
一個(gè)模塊xxx,在postconfiguration的時(shí)候,對(duì)于一個(gè)命令yyy,可能會(huì)定義一個(gè)函數(shù)ngx_rtmp_xxx_yyy來(lái)處理這個(gè)命 令,將全局的ngx_rtmp_yyy指向ngx_rtmp_xxx_yyy,并定義一個(gè)next_yyy,指向原來(lái)的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代码架构1 hook点总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: RTMP直播应用与延时分析
- 下一篇: nginx 心得