From patchwork Thu May 7 10:47:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Liu Steven X-Patchwork-Id: 19525 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id D4A1744BD29 for ; Thu, 7 May 2020 13:48:35 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B36DA689DAF; Thu, 7 May 2020 13:48:35 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from qq.com (smtpbg440.qq.com [183.3.255.59]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 11151687FD3 for ; Thu, 7 May 2020 13:48:27 +0300 (EEST) X-QQ-mid: bizesmtp17t1588848471t6y0p2mb Received: from localhost (unknown [103.107.216.231]) by esmtp6.qq.com (ESMTP) with id ; Thu, 07 May 2020 18:47:50 +0800 (CST) X-QQ-SSF: 01100000002000Y0ZXF0B00A0000000 X-QQ-FEAT: qo7VS5qHh2dlx9Zd85slEE22VfGVSS1whWwfgkemgOfBvPY2fpAc35kd1soH8 PboTAb7VRs50XVZVS5Benq3kPVBNwSXNHi7hvUL/e2lr0b0KUC7NZlO+tvgxM1yXDikrDtW jSbgQ6P6w773e+vbgq/TI2qRX1WIOfE8BZ+hBxpXbxmwycfkhwGiEFI+QfdvvE0Z+ktbbaj OUvzrAVkIYAbBDy+MC2rjvxbgfu84ypegGEKoHWTHnuJlgJwLXUJFnUeUMPj/72CJyDXpiH xQibyhOwB1vuxw9PBGU+nJC2jSMaaeqptnizkd5dRpiP31rl9UJM3pvpI= X-QQ-GoodBg: 0 From: Steven Liu To: ffmpeg-devel@ffmpeg.org Date: Thu, 7 May 2020 18:47:49 +0800 Message-Id: <20200507104749.61667-1-lq@chinaffmpeg.org> X-Mailer: git-send-email 2.25.0 MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtp:chinaffmpeg.org:qybgforeign:qybgforeign7 X-QQ-Bgrelay: 1 Subject: [FFmpeg-devel] [PATCH] avformat/hlsenc: move init file write code block to hls_write_header X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Steven Liu Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Steven Liu --- libavformat/hlsenc.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 5695c6cc95..a1eddade7b 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -2266,6 +2266,26 @@ static int hls_write_header(AVFormatContext *s) } } } + if (hls->segment_type == SEGMENT_TYPE_FMP4 && !vs->init_range_length) { + int range_length = 0; + int byterange_mode = (hls->flags & HLS_SINGLE_FILE) || (hls->max_seg_size > 0); + av_write_frame(vs->avf, NULL); /* Flush any buffered data */ + avio_tell(vs->avf->pb); + avio_flush(vs->avf->pb); + range_length = avio_close_dyn_buf(vs->avf->pb, &vs->init_buffer); + if (range_length <= 0) + return AVERROR(EINVAL); + avio_write(vs->out, vs->init_buffer, range_length); + if (!hls->resend_init_file) + av_freep(&vs->init_buffer); + vs->init_range_length = range_length; + avio_open_dyn_buf(&vs->avf->pb); + vs->packets_written = 0; + vs->start_pos = range_length; + if (!byterange_mode) { + hlsenc_io_close(s, &vs->out, vs->base_output_dirname); + } + } } return ret; @@ -2383,23 +2403,6 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) new_start_pos = avio_tell(oc->pb); vs->size = new_start_pos - vs->start_pos; avio_flush(oc->pb); - if (hls->segment_type == SEGMENT_TYPE_FMP4) { - if (!vs->init_range_length) { - range_length = avio_close_dyn_buf(oc->pb, &vs->init_buffer); - if (range_length <= 0) - return AVERROR(EINVAL); - avio_write(vs->out, vs->init_buffer, range_length); - if (!hls->resend_init_file) - av_freep(&vs->init_buffer); - vs->init_range_length = range_length; - avio_open_dyn_buf(&oc->pb); - vs->packets_written = 0; - vs->start_pos = range_length; - if (!byterange_mode) { - hlsenc_io_close(s, &vs->out, vs->base_output_dirname); - } - } - } if (!byterange_mode) { if (vs->vtt_avf) { hlsenc_io_close(s, &vs->vtt_avf->pb, vs->vtt_avf->url);