Skip to content

Commit 154f32f

Browse files
committed
fix bug: free mpegts frame
1 parent cc1d5f1 commit 154f32f

File tree

4 files changed

+30
-21
lines changed

4 files changed

+30
-21
lines changed

mpegts/ngx_hls_live_module.c

+17-7
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ static ngx_int_t
3030
ngx_hls_live_write_frame(ngx_rtmp_session_t *s, ngx_mpegts_frame_t *frame);
3131
static void
3232
ngx_hls_live_update_playlist(ngx_rtmp_session_t *s);
33+
static ngx_int_t
34+
ngx_hls_live_update(ngx_rtmp_session_t *s, ngx_rtmp_codec_ctx_t *codec_ctx);
3335

3436
static ngx_mpegts_video_pt next_mpegts_video;
3537
static ngx_mpegts_audio_pt next_mpegts_audio;
@@ -263,7 +265,7 @@ ngx_hls_live_write_playlist(ngx_rtmp_session_t *s, ngx_buf_t *out,
263265
m3u8.data = out->pos;
264266
m3u8.len = out->last - out->pos;
265267

266-
ngx_log_error(NGX_LOG_DEBUG, s->log, 0, "hls-live: playlist| %V, %D",
268+
ngx_log_error(NGX_LOG_INFO, s->log, 0, "hls-live: playlist| %V, %D",
267269
&m3u8, ctx->last_time);
268270

269271
return NGX_OK;
@@ -377,7 +379,8 @@ ngx_hls_live_prepare_frag(ngx_rtmp_session_t *s, ngx_hls_live_frag_t *frag)
377379
frame = frag->content[frag->content_pos];
378380

379381
ngx_log_error(NGX_LOG_DEBUG, s->log, 0, "hls-live: prepare_frag| "
380-
"pos %D, last %D, frame chain %p", frag->content_pos, frag->content_last,
382+
"pos %D, last %D, frame chain %p",
383+
frag->content_pos, frag->content_last,
381384
frame);
382385
for (cl = frame->chain; cl; cl = cl->next) {
383386
*ll = ngx_get_chainbuf(0, 0);
@@ -748,6 +751,7 @@ ngx_hls_live_play(ngx_rtmp_session_t *s, ngx_rtmp_play_t *v)
748751
{
749752
ngx_hls_live_app_conf_t *hacf;
750753
ngx_hls_live_ctx_t *ctx;
754+
// ngx_rtmp_codec_ctx_t *codec_ctx;
751755

752756
hacf = ngx_rtmp_get_module_app_conf(s, ngx_hls_live_module);
753757
if (hacf == NULL || !hacf->hls || s->live_type != NGX_HLS_LIVE) {
@@ -767,7 +771,17 @@ ngx_hls_live_play(ngx_rtmp_session_t *s, ngx_rtmp_play_t *v)
767771
ctx->sid.len = ngx_strlen(v->session);
768772
ctx->sid.data = ngx_pcalloc(s->pool, ctx->sid.len);
769773
ngx_memcpy(ctx->sid.data, v->session, ctx->sid.len);
774+
/*
775+
if (s->live_stream->publish_ctx) {
770776
777+
codec_ctx = ngx_rtmp_get_module_ctx(s->live_stream->publish_ctx->session,
778+
ngx_rtmp_codec_module);
779+
780+
ngx_mpegts_gop_link(s->live_stream->publish_ctx->session,
781+
s, hacf->playlen, hacf->playlen);
782+
ngx_hls_live_update(s, codec_ctx);
783+
}
784+
*/
771785
next:
772786
return next_play(s, v);
773787
}
@@ -925,13 +939,9 @@ ngx_hls_live_update(ngx_rtmp_session_t *s, ngx_rtmp_codec_ctx_t *codec_ctx)
925939

926940
while (s->out_pos != s->out_last) {
927941

928-
if (s->out_pos == s->out_last) {
929-
break;
930-
}
931-
932942
frame = s->mpegts_out[s->out_pos];
933943
#if 1
934-
ngx_log_error(NGX_LOG_DEBUG, s->log, 0,
944+
ngx_log_error(NGX_LOG_INFO, s->log, 0,
935945
"hls-live: update| "
936946
"frame[%p] pos[%O] last[%O] pts[%uL] type [%d], key %d, opened %d",
937947
frame, s->out_pos, s->out_last,frame->pts,

ngx_rtmp_gop_module.c

+1-9
Original file line numberDiff line numberDiff line change
@@ -559,17 +559,9 @@ ngx_rtmp_gop_send_gop(ngx_rtmp_session_t *s, ngx_rtmp_session_t *ss)
559559
frame->hdr.timestamp - ssctx->first_timestamp >= gacf->cache_time)
560560
{
561561
ssctx->send_gop = 3;
562-
pos = ngx_rtmp_gop_next(s, pos);
563562
break;
564563
}
565-
/*
566-
frame->hdr.timestamp = 0;
567-
if (frame->hdr.type == NGX_RTMP_MSG_AUDIO) {
568-
pos = ngx_rtmp_gop_next(s, pos);
569-
frame = sctx->cache[pos];
570-
continue;
571-
}
572-
*/
564+
573565
if (ngx_rtmp_gop_link_frame(ss, frame) == NGX_AGAIN) {
574566
break;
575567
}

ngx_rtmp_init.c

+10-3
Original file line numberDiff line numberDiff line change
@@ -282,9 +282,16 @@ ngx_rtmp_close_session(ngx_rtmp_session_t *s)
282282

283283
ngx_rtmp_free_merge_frame(s);
284284

285-
while (s->out_pos != s->out_last) {
286-
ngx_rtmp_shared_free_frame(s->out[s->out_pos++]);
287-
s->out_pos %= s->out_queue;
285+
if (s->live_type == NGX_HLS_LIVE || s->live_type == NGX_MPEGTS_LIVE) {
286+
// while (s->out_pos != s->out_last) {
287+
// ngx_rtmp_shared_free_mpegts_frame(s->mpegts_out[s->out_pos++]);
288+
// s->out_pos %= s->out_queue;
289+
// }
290+
} else {
291+
while (s->out_pos != s->out_last) {
292+
ngx_rtmp_shared_free_frame(s->out[s->out_pos++]);
293+
s->out_pos %= s->out_queue;
294+
}
288295
}
289296

290297
NGX_DESTROY_POOL(s->pool);

ngx_rtmp_shared_module.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,9 @@ ngx_rtmp_prepare_merge_frame(ngx_rtmp_session_t *s)
123123

124124
// save frame prepare to send
125125
if (s->live_type == NGX_MPEGTS_LIVE) {
126-
s->prepare_frame[n] = s->out[s->out_pos];
127-
} else {
128126
s->prepare_mpegts_frame[n] = s->mpegts_out[s->out_pos];
127+
} else {
128+
s->prepare_frame[n] = s->out[s->out_pos];
129129
}
130130

131131
++s->out_pos;

0 commit comments

Comments
 (0)