Skip to content

Commit 6143abc

Browse files
committed
added amf3_* handlers; this adds compatibility with amf3 players (srobe etc)
1 parent 4b25e34 commit 6143abc

File tree

5 files changed

+34
-29
lines changed

5 files changed

+34
-29
lines changed

ngx_rtmp.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -384,8 +384,12 @@ ngx_rtmp_init_event_handlers(ngx_conf_t *cf, ngx_rtmp_core_main_conf_t *cmcf)
384384
};
385385

386386
static size_t amf_events[] = {
387+
NGX_RTMP_MSG_AMF_CMD,
387388
NGX_RTMP_MSG_AMF_META,
388-
NGX_RTMP_MSG_AMF_CMD
389+
NGX_RTMP_MSG_AMF_SHARED,
390+
NGX_RTMP_MSG_AMF3_CMD,
391+
NGX_RTMP_MSG_AMF3_META,
392+
NGX_RTMP_MSG_AMF3_SHARED
389393
};
390394

391395
/* init standard protocol events */
@@ -400,10 +404,6 @@ ngx_rtmp_init_event_handlers(ngx_conf_t *cf, ngx_rtmp_core_main_conf_t *cmcf)
400404
*eh = ngx_rtmp_amf_message_handler;
401405
}
402406

403-
/* init amf shared object events */
404-
eh = ngx_array_push(&cmcf->events[NGX_RTMP_MSG_AMF_SHARED]);
405-
*eh = ngx_rtmp_amf_shared_object_handler;
406-
407407
/* init user protocol events */
408408
eh = ngx_array_push(&cmcf->events[NGX_RTMP_MSG_USER]);
409409
*eh = ngx_rtmp_user_message_handler;

ngx_rtmp_cmd_module.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ ngx_rtmp_cmd_connect_init(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
9494
{ NGX_RTMP_AMF_STRING,
9595
ngx_string("pageUrl"),
9696
v.page_url, sizeof(v.page_url) },
97+
98+
{ NGX_RTMP_AMF_NUMBER,
99+
ngx_string("objectEncoding"),
100+
&v.object_encoding, 0},
97101
};
98102

99103
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)
195199

196200
cscf = ngx_rtmp_get_module_srv_conf(s, ngx_rtmp_core_module);
197201

198-
ngx_log_debug7(NGX_LOG_DEBUG_RTMP, s->connection->log, 0,
202+
ngx_log_debug8(NGX_LOG_DEBUG_RTMP, s->connection->log, 0,
199203
"connect: app='%s' flashver='%s' swf_url='%s' "
200-
"tc_url='%s' page_url='%s' acodecs=%uD vcodecs=%uD",
204+
"tc_url='%s' page_url='%s' acodecs=%uD vcodecs=%uD "
205+
"object_encoding=%ui",
201206
v->app, v->flashver, v->swf_url, v->tc_url, v->page_url,
202-
(uint32_t)v->acodecs, (uint32_t)v->vcodecs);
207+
(uint32_t)v->acodecs, (uint32_t)v->vcodecs,
208+
(ngx_int_t)v->object_encoding);
203209

204210
trans = v->trans;
205211

@@ -247,6 +253,8 @@ ngx_rtmp_cmd_connect(ngx_rtmp_session_t *s, ngx_rtmp_connect_t *v)
247253
return NGX_ERROR;
248254
}
249255

256+
object_encoding = v->object_encoding;
257+
250258
/* send all replies */
251259
return ngx_rtmp_send_ack_size(s, cscf->ack_window) != NGX_OK
252260
|| ngx_rtmp_send_bandwidth(s, cscf->ack_window,

ngx_rtmp_cmd_module.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ typedef struct {
2929
double acodecs;
3030
double vcodecs;
3131
u_char page_url[NGX_RTMP_MAX_URL];
32+
double object_encoding;
3233
} ngx_rtmp_connect_t;
3334

3435

ngx_rtmp_handler.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ ngx_rtmp_message_type(uint8_t type)
4141
"?",
4242
"amf3_meta",
4343
"amf3_shared",
44-
"amd3_cmd",
44+
"amf3_cmd",
4545
"amf_meta",
4646
"amf_shared",
4747
"amf_cmd",

ngx_rtmp_receive.c

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,9 @@ ngx_rtmp_user_message_handler(ngx_rtmp_session_t *s,
164164
}
165165

166166

167-
static ngx_int_t
168-
ngx_rtmp_amf_message_basic_handler(ngx_rtmp_session_t *s,
169-
ngx_rtmp_header_t *h, ngx_chain_t *in, ngx_int_t name_typeless)
167+
ngx_int_t
168+
ngx_rtmp_amf_message_handler(ngx_rtmp_session_t *s,
169+
ngx_rtmp_header_t *h, ngx_chain_t *in)
170170
{
171171
ngx_rtmp_amf_ctx_t act;
172172
ngx_rtmp_core_main_conf_t *cmcf;
@@ -185,12 +185,24 @@ ngx_rtmp_amf_message_basic_handler(ngx_rtmp_session_t *s,
185185

186186
/* AMF command names come with string type, but shared object names
187187
* come without type */
188-
if (name_typeless) {
188+
if (h->type == NGX_RTMP_MSG_AMF_SHARED ||
189+
h->type == NGX_RTMP_MSG_AMF3_SHARED)
190+
{
189191
elts[0].type |= NGX_RTMP_AMF_TYPELESS;
190192
} else {
191193
elts[0].type &= ~NGX_RTMP_AMF_TYPELESS;
192194
}
193195

196+
if ((h->type == NGX_RTMP_MSG_AMF3_SHARED ||
197+
h->type == NGX_RTMP_MSG_AMF3_META ||
198+
h->type == NGX_RTMP_MSG_AMF3_CMD)
199+
&& in->buf->last > in->buf->pos)
200+
{
201+
ngx_log_debug1(NGX_LOG_DEBUG_RTMP, s->connection->log, 0,
202+
"AMF3 prefix: %ui", (ngx_int_t)*in->buf->pos);
203+
++in->buf->pos;
204+
}
205+
194206
cmcf = ngx_rtmp_get_module_main_conf(s, ngx_rtmp_core_module);
195207

196208
/* read AMF func name & transaction id */
@@ -233,22 +245,6 @@ ngx_rtmp_amf_message_basic_handler(ngx_rtmp_session_t *s,
233245
}
234246

235247

236-
ngx_int_t
237-
ngx_rtmp_amf_message_handler(ngx_rtmp_session_t *s,
238-
ngx_rtmp_header_t *h, ngx_chain_t *in)
239-
{
240-
return ngx_rtmp_amf_message_basic_handler(s, h, in, 0);
241-
}
242-
243-
244-
ngx_int_t
245-
ngx_rtmp_amf_shared_object_handler(ngx_rtmp_session_t *s,
246-
ngx_rtmp_header_t *h, ngx_chain_t *in)
247-
{
248-
return ngx_rtmp_amf_message_basic_handler(s, h, in, 1);
249-
}
250-
251-
252248
ngx_int_t
253249
ngx_rtmp_receive_amf(ngx_rtmp_session_t *s, ngx_chain_t *in,
254250
ngx_rtmp_amf_elt_t *elts, size_t nelts)

0 commit comments

Comments
 (0)