From 1da4bb923e5791170133b111dd528604747df933 Mon Sep 17 00:00:00 2001 From: Roman Arutyunyan Date: Thu, 14 Jun 2012 17:44:30 +0400 Subject: [PATCH] added H264 profile & level parsers --- ngx_rtmp_codec_module.c | 12 ++++++++++++ ngx_rtmp_codec_module.h | 2 ++ ngx_rtmp_stat_module.c | 19 ++++++++++++++++--- stat.xsl | 14 +++++++++++++- 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/ngx_rtmp_codec_module.c b/ngx_rtmp_codec_module.c index 1a505f4..1a48b6a 100644 --- a/ngx_rtmp_codec_module.c +++ b/ngx_rtmp_codec_module.c @@ -250,6 +250,8 @@ ngx_rtmp_codec_meta_data(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h, double audio_data_rate; double audio_codec_id_n; u_char audio_codec_id_s[32]; + u_char profile[32]; + u_char level[32]; } v; static ngx_rtmp_amf_elt_t in_video_codec_id[] = { @@ -311,6 +313,14 @@ ngx_rtmp_codec_meta_data(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h, { NGX_RTMP_AMF_VARIANT, ngx_string("audiocodecid"), in_audio_codec_id, sizeof(in_audio_codec_id) }, + + { NGX_RTMP_AMF_STRING, + ngx_string("profile"), + &v.profile, sizeof(v.profile) }, + + { NGX_RTMP_AMF_STRING, + ngx_string("level"), + &v.level, sizeof(v.level) }, }; static ngx_rtmp_amf_elt_t in_elts[] = { @@ -357,6 +367,8 @@ ngx_rtmp_codec_meta_data(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h, ctx->audio_codec_id = (v.audio_codec_id_n == -1 ? 0 : v.audio_codec_id_n == 0 ? NGX_RTMP_AUDIO_UNCOMPRESSED : v.audio_codec_id_n); + ngx_memcpy(ctx->profile, v.profile, sizeof(v.profile)); + ngx_memcpy(ctx->level, v.level, sizeof(v.level)); ngx_log_debug8(NGX_LOG_DEBUG_RTMP, s->connection->log, 0, "codec: data frame: " diff --git a/ngx_rtmp_codec_module.h b/ngx_rtmp_codec_module.h index 0b802e1..efd4d8e 100644 --- a/ngx_rtmp_codec_module.h +++ b/ngx_rtmp_codec_module.h @@ -55,6 +55,8 @@ typedef struct { ngx_uint_t video_codec_id; ngx_uint_t audio_data_rate; ngx_uint_t audio_codec_id; + u_char profile[32]; + u_char level[32]; ngx_uint_t avc_version; ngx_uint_t aac_version; diff --git a/ngx_rtmp_stat_module.c b/ngx_rtmp_stat_module.c index f3b609f..a1a9912 100644 --- a/ngx_rtmp_stat_module.c +++ b/ngx_rtmp_stat_module.c @@ -347,17 +347,30 @@ ngx_rtmp_stat_live(ngx_http_request_t *r, ngx_chain_t ***lll, NGX_RTMP_STAT_L(""); NGX_RTMP_STAT(buf, ngx_snprintf(buf, sizeof(buf), "%ui", codec->frame_rate) - buf); - NGX_RTMP_STAT_L("\r\n"); + if (*codec->profile) { + NGX_RTMP_STAT_L(""); + NGX_RTMP_STAT_ECS(codec->profile); + NGX_RTMP_STAT_L(""); + } + if (*codec->level) { + NGX_RTMP_STAT_L(""); + NGX_RTMP_STAT_ECS(codec->level); + NGX_RTMP_STAT_L(""); + } + NGX_RTMP_STAT_L("\r\n"); } NGX_RTMP_STAT_L(""); diff --git a/stat.xsl b/stat.xsl index 9531e63..36b3aa5 100644 --- a/stat.xsl +++ b/stat.xsl @@ -92,7 +92,11 @@ x - + + + + + @@ -172,4 +176,12 @@ publishing + + / + + + + / + +