preliminary fixes in relay module

This commit is contained in:
Roman Arutyunyan
2012-11-20 16:29:22 +04:00
parent 4a0d41b3c8
commit f5580e1652
2 changed files with 38 additions and 20 deletions

View File

@ -4,12 +4,14 @@
#include "ngx_rtmp_relay_module.h" #include "ngx_rtmp_relay_module.h"
#include "ngx_rtmp_room_module.h"
#include "ngx_rtmp_cmd_module.h" #include "ngx_rtmp_cmd_module.h"
static ngx_rtmp_publish_pt next_publish; static ngx_rtmp_create_room_pt next_create_room;
static ngx_rtmp_play_pt next_play; static ngx_rtmp_delete_room_pt next_delete_room;
static ngx_rtmp_delete_stream_pt next_delete_stream; 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); 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 * static ngx_int_t
ngx_rtmp_relay_create_remote_ctx(ngx_rtmp_session_t *s, ngx_str_t* name, ngx_rtmp_relay_create(ngx_rtmp_room_t *r, ngx_uint_t nrelay)
ngx_rtmp_relay_target_t *target)
{ {
ngx_rtmp_relay_target_t *relay;
ngx_rtmp_relay_room_ctx_t *rctx;
ngx_rtmp_relay_ctx_t *rctx; ngx_rtmp_relay_ctx_t *rctx;
ngx_rtmp_addr_conf_t *addr_conf; ngx_rtmp_addr_conf_t *addr_conf;
ngx_rtmp_conf_ctx_t *addr_ctx; 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; u_char *first, *last, *p;
ngx_log_debug0(NGX_LOG_DEBUG_RTMP, s->connection->log, 0, 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); 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 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_app_conf_t *racf;
ngx_rtmp_relay_target_t *target, **t; ngx_rtmp_relay_target_t *target, **t;
ngx_str_t name; ngx_str_t name;
size_t n; size_t n;
ngx_rtmp_relay_ctx_t *ctx; ngx_rtmp_relay_ctx_t *ctx;
if (s->auto_pushed) { if (s->auto_pushed) {
goto next; 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); ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_relay_module);
if (ctx && ctx->relay) { if (ctx && ctx->relay) {
goto next; 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.len = ngx_strlen(v->name);
name.data = 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: 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; *h = ngx_rtmp_relay_handshake_done;
next_publish = ngx_rtmp_publish; next_create_room = ngx_rtmp_create_room;
ngx_rtmp_publish = ngx_rtmp_relay_publish; ngx_rtmp_create_room = ngx_rtmp_relay_create_room;
next_play = ngx_rtmp_play; next_delete_room = ngx_rtmp_delete_room;
ngx_rtmp_play = ngx_rtmp_relay_play; ngx_rtmp_delete_room = ngx_rtmp_relay_delete_room;
next_delete_stream = ngx_rtmp_delete_stream; next_join_room = ngx_rtmp_join_room;
ngx_rtmp_delete_stream = ngx_rtmp_relay_delete_stream; 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); ch = ngx_array_push(&cmcf->amf);

View File

@ -9,7 +9,7 @@
#include "ngx_rtmp.h" #include "ngx_rtmp.h"
/* TODO: rename to ngx_rtmp_relay_t */
typedef struct { typedef struct {
ngx_url_t url; ngx_url_t url;
ngx_str_t app; ngx_str_t app;
@ -22,6 +22,7 @@ typedef struct {
ngx_int_t live; ngx_int_t live;
ngx_int_t start; ngx_int_t start;
ngx_int_t stop; ngx_int_t stop;
unsigned push:1;
void *tag; /* usually module reference */ void *tag; /* usually module reference */
void *data; /* module-specific data */ 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; extern ngx_module_t ngx_rtmp_relay_module;