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
2223static void * ngx_rtmp_codec_create_app_conf (ngx_conf_t * cf );
2324static 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}
0 commit comments