mirror of
https://github.com/zotanmew/nginx-rtmp-module.git
synced 2024-05-10 06:21:09 +02:00
added amf3_* handlers; this adds compatibility with amf3 players (srobe etc)
This commit is contained in:
parent
4b25e34338
commit
6143abc418
10
ngx_rtmp.c
10
ngx_rtmp.c
|
@ -384,8 +384,12 @@ ngx_rtmp_init_event_handlers(ngx_conf_t *cf, ngx_rtmp_core_main_conf_t *cmcf)
|
|||
};
|
||||
|
||||
static size_t amf_events[] = {
|
||||
NGX_RTMP_MSG_AMF_CMD,
|
||||
NGX_RTMP_MSG_AMF_META,
|
||||
NGX_RTMP_MSG_AMF_CMD
|
||||
NGX_RTMP_MSG_AMF_SHARED,
|
||||
NGX_RTMP_MSG_AMF3_CMD,
|
||||
NGX_RTMP_MSG_AMF3_META,
|
||||
NGX_RTMP_MSG_AMF3_SHARED
|
||||
};
|
||||
|
||||
/* init standard protocol events */
|
||||
|
@ -400,10 +404,6 @@ ngx_rtmp_init_event_handlers(ngx_conf_t *cf, ngx_rtmp_core_main_conf_t *cmcf)
|
|||
*eh = ngx_rtmp_amf_message_handler;
|
||||
}
|
||||
|
||||
/* init amf shared object events */
|
||||
eh = ngx_array_push(&cmcf->events[NGX_RTMP_MSG_AMF_SHARED]);
|
||||
*eh = ngx_rtmp_amf_shared_object_handler;
|
||||
|
||||
/* init user protocol events */
|
||||
eh = ngx_array_push(&cmcf->events[NGX_RTMP_MSG_USER]);
|
||||
*eh = ngx_rtmp_user_message_handler;
|
||||
|
|
|
@ -94,6 +94,10 @@ ngx_rtmp_cmd_connect_init(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
|
|||
{ NGX_RTMP_AMF_STRING,
|
||||
ngx_string("pageUrl"),
|
||||
v.page_url, sizeof(v.page_url) },
|
||||
|
||||
{ NGX_RTMP_AMF_NUMBER,
|
||||
ngx_string("objectEncoding"),
|
||||
&v.object_encoding, 0},
|
||||
};
|
||||
|
||||
static ngx_rtmp_amf_elt_t in_elts[] = {
|
||||
|
@ -195,11 +199,13 @@ ngx_rtmp_cmd_connect(ngx_rtmp_session_t *s, ngx_rtmp_connect_t *v)
|
|||
|
||||
cscf = ngx_rtmp_get_module_srv_conf(s, ngx_rtmp_core_module);
|
||||
|
||||
ngx_log_debug7(NGX_LOG_DEBUG_RTMP, s->connection->log, 0,
|
||||
ngx_log_debug8(NGX_LOG_DEBUG_RTMP, s->connection->log, 0,
|
||||
"connect: app='%s' flashver='%s' swf_url='%s' "
|
||||
"tc_url='%s' page_url='%s' acodecs=%uD vcodecs=%uD",
|
||||
"tc_url='%s' page_url='%s' acodecs=%uD vcodecs=%uD "
|
||||
"object_encoding=%ui",
|
||||
v->app, v->flashver, v->swf_url, v->tc_url, v->page_url,
|
||||
(uint32_t)v->acodecs, (uint32_t)v->vcodecs);
|
||||
(uint32_t)v->acodecs, (uint32_t)v->vcodecs,
|
||||
(ngx_int_t)v->object_encoding);
|
||||
|
||||
trans = v->trans;
|
||||
|
||||
|
@ -247,6 +253,8 @@ ngx_rtmp_cmd_connect(ngx_rtmp_session_t *s, ngx_rtmp_connect_t *v)
|
|||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
object_encoding = v->object_encoding;
|
||||
|
||||
/* send all replies */
|
||||
return ngx_rtmp_send_ack_size(s, cscf->ack_window) != NGX_OK
|
||||
|| ngx_rtmp_send_bandwidth(s, cscf->ack_window,
|
||||
|
|
|
@ -29,6 +29,7 @@ typedef struct {
|
|||
double acodecs;
|
||||
double vcodecs;
|
||||
u_char page_url[NGX_RTMP_MAX_URL];
|
||||
double object_encoding;
|
||||
} ngx_rtmp_connect_t;
|
||||
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ ngx_rtmp_message_type(uint8_t type)
|
|||
"?",
|
||||
"amf3_meta",
|
||||
"amf3_shared",
|
||||
"amd3_cmd",
|
||||
"amf3_cmd",
|
||||
"amf_meta",
|
||||
"amf_shared",
|
||||
"amf_cmd",
|
||||
|
|
|
@ -164,9 +164,9 @@ ngx_rtmp_user_message_handler(ngx_rtmp_session_t *s,
|
|||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_rtmp_amf_message_basic_handler(ngx_rtmp_session_t *s,
|
||||
ngx_rtmp_header_t *h, ngx_chain_t *in, ngx_int_t name_typeless)
|
||||
ngx_int_t
|
||||
ngx_rtmp_amf_message_handler(ngx_rtmp_session_t *s,
|
||||
ngx_rtmp_header_t *h, ngx_chain_t *in)
|
||||
{
|
||||
ngx_rtmp_amf_ctx_t act;
|
||||
ngx_rtmp_core_main_conf_t *cmcf;
|
||||
|
@ -185,12 +185,24 @@ ngx_rtmp_amf_message_basic_handler(ngx_rtmp_session_t *s,
|
|||
|
||||
/* AMF command names come with string type, but shared object names
|
||||
* come without type */
|
||||
if (name_typeless) {
|
||||
if (h->type == NGX_RTMP_MSG_AMF_SHARED ||
|
||||
h->type == NGX_RTMP_MSG_AMF3_SHARED)
|
||||
{
|
||||
elts[0].type |= NGX_RTMP_AMF_TYPELESS;
|
||||
} else {
|
||||
elts[0].type &= ~NGX_RTMP_AMF_TYPELESS;
|
||||
}
|
||||
|
||||
if ((h->type == NGX_RTMP_MSG_AMF3_SHARED ||
|
||||
h->type == NGX_RTMP_MSG_AMF3_META ||
|
||||
h->type == NGX_RTMP_MSG_AMF3_CMD)
|
||||
&& in->buf->last > in->buf->pos)
|
||||
{
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_RTMP, s->connection->log, 0,
|
||||
"AMF3 prefix: %ui", (ngx_int_t)*in->buf->pos);
|
||||
++in->buf->pos;
|
||||
}
|
||||
|
||||
cmcf = ngx_rtmp_get_module_main_conf(s, ngx_rtmp_core_module);
|
||||
|
||||
/* read AMF func name & transaction id */
|
||||
|
@ -233,22 +245,6 @@ ngx_rtmp_amf_message_basic_handler(ngx_rtmp_session_t *s,
|
|||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
ngx_rtmp_amf_message_handler(ngx_rtmp_session_t *s,
|
||||
ngx_rtmp_header_t *h, ngx_chain_t *in)
|
||||
{
|
||||
return ngx_rtmp_amf_message_basic_handler(s, h, in, 0);
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
ngx_rtmp_amf_shared_object_handler(ngx_rtmp_session_t *s,
|
||||
ngx_rtmp_header_t *h, ngx_chain_t *in)
|
||||
{
|
||||
return ngx_rtmp_amf_message_basic_handler(s, h, in, 1);
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
ngx_rtmp_receive_amf(ngx_rtmp_session_t *s, ngx_chain_t *in,
|
||||
ngx_rtmp_amf_elt_t *elts, size_t nelts)
|
||||
|
|
Loading…
Reference in a new issue