Skip to content

Commit 30d6fef

Browse files
refine encoder metadata support
rename server_name to rtmp_server_name
1 parent 1ee3b01 commit 30d6fef

File tree

2 files changed

+40
-14
lines changed

2 files changed

+40
-14
lines changed

ngx_rtmp_codec_module.c

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#define NGX_RTMP_CODEC_META_COPY 2
1919

2020
#define NGX_RTMP_CODEC_META_SERVER_NAME "NGINX HTTP-FLV (https://github.com/winshining/nginx-http-flv-module)"
21+
#define NGX_RTMP_CODEC_META_ENCODER_NAME ""
2122

2223
static void * ngx_rtmp_codec_create_app_conf(ngx_conf_t *cf);
2324
static char * ngx_rtmp_codec_merge_app_conf(ngx_conf_t *cf,
@@ -62,15 +63,15 @@ static ngx_command_t ngx_rtmp_codec_commands[] = {
6263
offsetof(ngx_rtmp_codec_app_conf_t, meta),
6364
&ngx_rtmp_codec_meta_slots },
6465

65-
{ ngx_string("server_name"),
66-
NGX_RTMP_MAIN_CONF | NGX_RTMP_SRV_CONF | NGX_RTMP_APP_CONF | NGX_CONF_TAKE1,
66+
{ ngx_string("rtmp_server_name"),
67+
NGX_RTMP_MAIN_CONF | NGX_RTMP_SRV_CONF | NGX_RTMP_APP_CONF | NGX_CONF_TAKE1,
6768
ngx_conf_set_str_slot,
6869
NGX_RTMP_APP_CONF_OFFSET,
6970
offsetof(ngx_rtmp_codec_app_conf_t, server_name),
7071
NULL },
7172

7273
{ ngx_string("encoder_name"),
73-
NGX_RTMP_MAIN_CONF | NGX_RTMP_SRV_CONF | NGX_RTMP_APP_CONF | NGX_CONF_TAKE1,
74+
NGX_RTMP_MAIN_CONF | NGX_RTMP_SRV_CONF | NGX_RTMP_APP_CONF | NGX_CONF_TAKE1,
7475
ngx_conf_set_str_slot,
7576
NGX_RTMP_APP_CONF_OFFSET,
7677
offsetof(ngx_rtmp_codec_app_conf_t, encoder_name),
@@ -626,6 +627,7 @@ ngx_rtmp_codec_reconstruct_meta(ngx_rtmp_session_t *s)
626627
ngx_rtmp_core_srv_conf_t *cscf;
627628
ngx_rtmp_codec_app_conf_t *cacf;
628629
ngx_int_t rc;
630+
size_t encoder_len;
629631

630632
static struct {
631633
double width;
@@ -637,7 +639,8 @@ ngx_rtmp_codec_reconstruct_meta(ngx_rtmp_session_t *s)
637639
double audio_data_rate;
638640
double audio_codec_id;
639641
u_char profile[32];
640-
u_char level[32];
642+
u_char level[32];
643+
u_char encoder[128];
641644
} v;
642645

643646
static ngx_rtmp_amf_elt_t out_inf[] = {
@@ -700,7 +703,7 @@ ngx_rtmp_codec_reconstruct_meta(ngx_rtmp_session_t *s)
700703

701704
{ NGX_RTMP_AMF_STRING,
702705
ngx_string("encoder"),
703-
NULL, 0 },
706+
&v.encoder, sizeof(v.encoder)},
704707
};
705708

706709
static ngx_rtmp_amf_elt_t out_elts[] = {
@@ -711,7 +714,7 @@ ngx_rtmp_codec_reconstruct_meta(ngx_rtmp_session_t *s)
711714

712715
{ NGX_RTMP_AMF_OBJECT,
713716
ngx_null_string,
714-
out_inf, sizeof(out_inf) - 1 },
717+
out_inf, sizeof(out_inf) },
715718
};
716719

717720
ctx = ngx_rtmp_get_module_ctx(s, ngx_rtmp_codec_module);
@@ -730,10 +733,6 @@ ngx_rtmp_codec_reconstruct_meta(ngx_rtmp_session_t *s)
730733
if (cacf->server_name.len) {
731734
out_inf[0].data = cacf->server_name.data;
732735
}
733-
if (cacf->encoder_name.len) {
734-
out_inf[14].data = cacf->encoder_name.data;
735-
out_elts[1].len++;
736-
}
737736

738737
v.width = ctx->width;
739738
v.height = ctx->height;
@@ -744,7 +743,26 @@ ngx_rtmp_codec_reconstruct_meta(ngx_rtmp_session_t *s)
744743
v.audio_data_rate = ctx->audio_data_rate;
745744
v.audio_codec_id = ctx->audio_codec_id;
746745
ngx_memcpy(v.profile, ctx->profile, sizeof(ctx->profile));
747-
ngx_memcpy(v.level, ctx->level, sizeof(ctx->level));
746+
ngx_memcpy(v.level, ctx->level, sizeof(ctx->level));
747+
748+
encoder_len = cacf->encoder_name.len;
749+
if (encoder_len)
750+
{
751+
if (encoder_len > sizeof(v.encoder) - 1)
752+
{
753+
encoder_len = sizeof(v.encoder) - 1;
754+
}
755+
ngx_memcpy(v.encoder, cacf->encoder_name.data, encoder_len);
756+
v.encoder[encoder_len] = 0;
757+
}
758+
else if (ctx->encoder[0])
759+
{
760+
ngx_memcpy(v.encoder, ctx->encoder, sizeof(ctx->encoder));
761+
}
762+
else
763+
{
764+
out_elts[1].len--;
765+
}
748766

749767
rc = ngx_rtmp_append_amf(s, &ctx->meta, NULL, out_elts,
750768
sizeof(out_elts) / sizeof(out_elts[0]));
@@ -825,6 +843,7 @@ ngx_rtmp_codec_meta_data(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
825843
u_char audio_codec_id_s[32];
826844
u_char profile[32];
827845
u_char level[32];
846+
u_char encoder[128];
828847
} v;
829848

830849
static ngx_rtmp_amf_elt_t in_video_codec_id[] = {
@@ -894,6 +913,10 @@ ngx_rtmp_codec_meta_data(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
894913
{ NGX_RTMP_AMF_STRING,
895914
ngx_string("level"),
896915
&v.level, sizeof(v.level) },
916+
917+
{ NGX_RTMP_AMF_STRING,
918+
ngx_string("encoder"),
919+
&v.encoder, sizeof(v.encoder)},
897920
};
898921

899922
static ngx_rtmp_amf_elt_t in_elts[] = {
@@ -959,7 +982,8 @@ ngx_rtmp_codec_meta_data(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
959982
? 0 : v.audio_codec_id_n == 0
960983
? NGX_RTMP_AUDIO_UNCOMPRESSED : (ngx_uint_t) v.audio_codec_id_n);
961984
ngx_memcpy(ctx->profile, v.profile, sizeof(v.profile));
962-
ngx_memcpy(ctx->level, v.level, sizeof(v.level));
985+
ngx_memcpy(ctx->level, v.level, sizeof(v.level));
986+
ngx_memcpy(ctx->encoder, v.encoder, sizeof(v.encoder));
963987

964988
ngx_log_debug8(NGX_LOG_DEBUG_RTMP, s->connection->log, 0,
965989
"codec: data frame: "
@@ -1007,7 +1031,8 @@ ngx_rtmp_codec_merge_app_conf(ngx_conf_t *cf, void *parent, void *child)
10071031
ngx_rtmp_codec_app_conf_t *conf = child;
10081032

10091033
ngx_conf_merge_uint_value(conf->meta, prev->meta, NGX_RTMP_CODEC_META_ON);
1010-
ngx_conf_merge_str_value(conf->server_name, prev->server_name, NGX_RTMP_CODEC_META_SERVER_NAME);
1034+
ngx_conf_merge_str_value(conf->server_name, prev->server_name, NGX_RTMP_CODEC_META_SERVER_NAME);
1035+
ngx_conf_merge_str_value(conf->encoder_name, prev->encoder_name, NGX_RTMP_CODEC_META_ENCODER_NAME);
10111036

10121037
return NGX_CONF_OK;
10131038
}

ngx_rtmp_codec_module.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ typedef struct {
103103
ngx_uint_t sample_size; /* 1=8bit, 2=16bit */
104104
ngx_uint_t audio_channels; /* 1, 2 */
105105
u_char profile[32];
106-
u_char level[32];
106+
u_char level[32];
107+
u_char encoder[128];
107108

108109
ngx_chain_t *avc_header;
109110
ngx_chain_t *aac_header;

0 commit comments

Comments
 (0)