nginx rtmp代码架构1 hook点总结
生活随笔
收集整理的這篇文章主要介紹了
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;
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点总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RTMP直播应用与延时分析
- 下一篇: nginx 心得