From f5580e1652b46b531e834a47a1af34cce807d137 Mon Sep 17 00:00:00 2001 From: Roman Arutyunyan Date: Tue, 20 Nov 2012 16:29:22 +0400 Subject: [PATCH] preliminary fixes in relay module --- ngx_rtmp_relay_module.c | 50 +++++++++++++++++++++++++---------------- ngx_rtmp_relay_module.h | 8 ++++++- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/ngx_rtmp_relay_module.c b/ngx_rtmp_relay_module.c index 20cfcd9..9bd8d40 100644 --- a/ngx_rtmp_relay_module.c +++ b/ngx_rtmp_relay_module.c @@ -4,12 +4,14 @@ #include "ngx_rtmp_relay_module.h" +#include "ngx_rtmp_room_module.h" #include "ngx_rtmp_cmd_module.h" -static ngx_rtmp_publish_pt next_publish; -static ngx_rtmp_play_pt next_play; -static ngx_rtmp_delete_stream_pt next_delete_stream; +static ngx_rtmp_create_room_pt next_create_room; +static ngx_rtmp_delete_room_pt next_delete_room; +static ngx_rtmp_join_room_pt next_join_room; +static ngx_rtmp_leave_room_pt next_leave_room; static ngx_int_t ngx_rtmp_relay_postconfiguration(ngx_conf_t *cf); @@ -256,10 +258,12 @@ ngx_rtmp_relay_copy_str(ngx_pool_t *pool, ngx_str_t *dst, ngx_str_t *src) } -static ngx_rtmp_relay_ctx_t * -ngx_rtmp_relay_create_remote_ctx(ngx_rtmp_session_t *s, ngx_str_t* name, - ngx_rtmp_relay_target_t *target) +static ngx_int_t +ngx_rtmp_relay_create(ngx_rtmp_room_t *r, ngx_uint_t nrelay) { + ngx_rtmp_relay_target_t *relay; + ngx_rtmp_relay_room_ctx_t *rctx; + ngx_rtmp_relay_ctx_t *rctx; ngx_rtmp_addr_conf_t *addr_conf; ngx_rtmp_conf_ctx_t *addr_ctx; @@ -273,7 +277,10 @@ ngx_rtmp_relay_create_remote_ctx(ngx_rtmp_session_t *s, ngx_str_t* name, u_char *first, *last, *p; ngx_log_debug0(NGX_LOG_DEBUG_RTMP, s->connection->log, 0, - "relay: create remote context"); + "relay: create"); + + rctx + racf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_relay_module); @@ -541,27 +548,29 @@ ngx_rtmp_relay_push(ngx_rtmp_session_t *s, ngx_str_t *name, static ngx_int_t -ngx_rtmp_relay_publish(ngx_rtmp_session_t *s, ngx_rtmp_publish_t *v) +ngx_rtmp_relay_create_room(ngx_rtmp_room_t *r) { ngx_rtmp_relay_app_conf_t *racf; ngx_rtmp_relay_target_t *target, **t; ngx_str_t name; size_t n; + ngx_rtmp_relay_ctx_t *ctx; if (s->auto_pushed) { goto next; } + racf = ngx_rtmp_get_module_app_conf(r, ngx_rtmp_relay_module); + if (racf == NULL || racf->pushes.nelts == 0) { + goto next; + } + ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_relay_module); if (ctx && ctx->relay) { goto next; } - racf = ngx_rtmp_get_module_app_conf(s, ngx_rtmp_relay_module); - if (racf == NULL || racf->pushes.nelts == 0) { - goto next; - } name.len = ngx_strlen(v->name); name.data = v->name; @@ -592,7 +601,7 @@ ngx_rtmp_relay_publish(ngx_rtmp_session_t *s, ngx_rtmp_publish_t *v) } next: - return next_publish(s, v); + return next_create_room(r); } @@ -1410,14 +1419,17 @@ ngx_rtmp_relay_postconfiguration(ngx_conf_t *cf) *h = ngx_rtmp_relay_handshake_done; - next_publish = ngx_rtmp_publish; - ngx_rtmp_publish = ngx_rtmp_relay_publish; + next_create_room = ngx_rtmp_create_room; + ngx_rtmp_create_room = ngx_rtmp_relay_create_room; - next_play = ngx_rtmp_play; - ngx_rtmp_play = ngx_rtmp_relay_play; + next_delete_room = ngx_rtmp_delete_room; + ngx_rtmp_delete_room = ngx_rtmp_relay_delete_room; - next_delete_stream = ngx_rtmp_delete_stream; - ngx_rtmp_delete_stream = ngx_rtmp_relay_delete_stream; + next_join_room = ngx_rtmp_join_room; + ngx_rtmp_join_room = ngx_rtmp_relay_join_room; + + next_leave_room = ngx_rtmp_leave_room; + ngx_rtmp_leave_room = ngx_rtmp_relay_leave_room; ch = ngx_array_push(&cmcf->amf); diff --git a/ngx_rtmp_relay_module.h b/ngx_rtmp_relay_module.h index 7e676bf..ed33e0e 100644 --- a/ngx_rtmp_relay_module.h +++ b/ngx_rtmp_relay_module.h @@ -9,7 +9,7 @@ #include "ngx_rtmp.h" - +/* TODO: rename to ngx_rtmp_relay_t */ typedef struct { ngx_url_t url; ngx_str_t app; @@ -22,6 +22,7 @@ typedef struct { ngx_int_t live; ngx_int_t start; ngx_int_t stop; + unsigned push:1; void *tag; /* usually module reference */ void *data; /* module-specific data */ @@ -56,6 +57,11 @@ struct ngx_rtmp_relay_ctx_s { }; +typedef struct { + ngx_array_t relays; /* ngx_rtmp_relay_target_t */ +} ngx_rtmp_relay_room_ctx_t; + + extern ngx_module_t ngx_rtmp_relay_module;