implemented restart on packet drop

This commit is contained in:
Roman Arutyunyan
2013-01-05 10:52:44 +04:00
parent 5a4ee6392b
commit fe7a242d0d
3 changed files with 4 additions and 27 deletions

View File

@ -56,13 +56,6 @@ static ngx_command_t ngx_rtmp_live_commands[] = {
offsetof(ngx_rtmp_live_app_conf_t, buflen), offsetof(ngx_rtmp_live_app_conf_t, buflen),
NULL }, NULL },
{ ngx_string("sync"),
NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1,
ngx_rtmp_live_set_msec_slot,
NGX_RTMP_APP_CONF_OFFSET,
offsetof(ngx_rtmp_live_app_conf_t, sync),
NULL },
{ ngx_string("interleave"), { ngx_string("interleave"),
NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1, NGX_RTMP_MAIN_CONF|NGX_RTMP_SRV_CONF|NGX_RTMP_APP_CONF|NGX_CONF_TAKE1,
ngx_conf_set_flag_slot, ngx_conf_set_flag_slot,
@ -151,7 +144,6 @@ ngx_rtmp_live_create_app_conf(ngx_conf_t *cf)
lacf->meta = NGX_CONF_UNSET; lacf->meta = NGX_CONF_UNSET;
lacf->nbuckets = NGX_CONF_UNSET; lacf->nbuckets = NGX_CONF_UNSET;
lacf->buflen = NGX_CONF_UNSET; lacf->buflen = NGX_CONF_UNSET;
lacf->sync = NGX_CONF_UNSET;
lacf->idle_timeout = NGX_CONF_UNSET; lacf->idle_timeout = NGX_CONF_UNSET;
lacf->interleave = NGX_CONF_UNSET; lacf->interleave = NGX_CONF_UNSET;
lacf->wait_key = NGX_CONF_UNSET; lacf->wait_key = NGX_CONF_UNSET;
@ -173,7 +165,6 @@ ngx_rtmp_live_merge_app_conf(ngx_conf_t *cf, void *parent, void *child)
ngx_conf_merge_value(conf->meta, prev->meta, 1); ngx_conf_merge_value(conf->meta, prev->meta, 1);
ngx_conf_merge_value(conf->nbuckets, prev->nbuckets, 1024); ngx_conf_merge_value(conf->nbuckets, prev->nbuckets, 1024);
ngx_conf_merge_msec_value(conf->buflen, prev->buflen, 0); ngx_conf_merge_msec_value(conf->buflen, prev->buflen, 0);
ngx_conf_merge_msec_value(conf->sync, prev->sync, 300);
ngx_conf_merge_msec_value(conf->idle_timeout, prev->idle_timeout, 0); ngx_conf_merge_msec_value(conf->idle_timeout, prev->idle_timeout, 0);
ngx_conf_merge_value(conf->interleave, prev->interleave, 0); ngx_conf_merge_value(conf->interleave, prev->interleave, 0);
ngx_conf_merge_value(conf->wait_key, prev->wait_key, 0); ngx_conf_merge_value(conf->wait_key, prev->wait_key, 0);
@ -350,10 +341,8 @@ ngx_rtmp_live_set_status(ngx_rtmp_session_t *s, ngx_chain_t *control,
} }
ctx->cs[0].active = 0; ctx->cs[0].active = 0;
ctx->cs[0].dropped = 0;
ctx->cs[1].active = 0; ctx->cs[1].active = 0;
ctx->cs[1].dropped = 0;
} }
@ -834,16 +823,6 @@ ngx_rtmp_live_av(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
} }
} }
/* sync stream */
if (cs->active && (lacf->sync && cs->dropped > lacf->sync)) {
ngx_log_debug2(NGX_LOG_DEBUG_RTMP, ss->connection->log, 0,
"live: sync %s dropped=%uD", type_s, cs->dropped);
cs->active = 0;
cs->dropped = 0;
}
/* absolute packet */ /* absolute packet */
if (!cs->active) { if (!cs->active) {
@ -941,7 +920,7 @@ ngx_rtmp_live_av(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
if (ngx_rtmp_send_message(ss, rpkt, prio) != NGX_OK) { if (ngx_rtmp_send_message(ss, rpkt, prio) != NGX_OK) {
++pctx->ndropped; ++pctx->ndropped;
cs->dropped += delta; cs->active = 0;
if (mandatory) { if (mandatory) {
ngx_log_debug0(NGX_LOG_DEBUG_RTMP, ss->connection->log, 0, ngx_log_debug0(NGX_LOG_DEBUG_RTMP, ss->connection->log, 0,

View File

@ -21,7 +21,6 @@ typedef struct {
unsigned active:1; unsigned active:1;
uint32_t timestamp; uint32_t timestamp;
uint32_t csid; uint32_t csid;
uint32_t dropped;
} ngx_rtmp_live_chunk_stream_t; } ngx_rtmp_live_chunk_stream_t;
@ -57,7 +56,6 @@ typedef struct {
ngx_rtmp_live_stream_t **streams; ngx_rtmp_live_stream_t **streams;
ngx_flag_t live; ngx_flag_t live;
ngx_flag_t meta; ngx_flag_t meta;
ngx_msec_t sync;
ngx_msec_t idle_timeout; ngx_msec_t idle_timeout;
ngx_flag_t atc; ngx_flag_t atc;
ngx_flag_t interleave; ngx_flag_t interleave;

View File

@ -354,9 +354,9 @@ ngx_rtmp_stat_live(ngx_http_request_t *r, ngx_chain_t ***lll,
NGX_RTMP_STAT_L("</time>"); NGX_RTMP_STAT_L("</time>");
NGX_RTMP_STAT_L("<dropped>"); NGX_RTMP_STAT_L("<dropped>");
NGX_RTMP_STAT(buf, ngx_snprintf(buf, sizeof(buf), NGX_RTMP_STAT(buf, ngx_snprintf(buf, sizeof(buf), "%%uD",
"%uD/%uD", ctx->cs[1].dropped, ctx->ndropped)
ctx->cs[0].dropped) - buf); - buf);
NGX_RTMP_STAT_L("</dropped>"); NGX_RTMP_STAT_L("</dropped>");
NGX_RTMP_STAT_L("<avsync>"); NGX_RTMP_STAT_L("<avsync>");