From patchwork Thu Mar 28 23:48:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: atomantinator@gmail.com X-Patchwork-Id: 12525 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 27BCA447D6C for ; Fri, 29 Mar 2019 01:57:41 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0958F68A9A5; Fri, 29 Mar 2019 01:57:41 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 72EEA68A8D8 for ; Fri, 29 Mar 2019 01:57:34 +0200 (EET) Received: by mail-wm1-f65.google.com with SMTP id z24so710827wmi.5 for ; Thu, 28 Mar 2019 16:57:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=rC0/8HxIn6G5tQHAQo3wUCz1IT1sbakt4G1fjrSPdIQ=; b=gTYRildXObEA3dXUFweLCRU/iLm5g/bFEbjelPqW1hZQr4POdHAAZQ+qBQvGaPfF0S hBWc4KdVEJLYVoGN6uEVYnjBGd8G9UAdMBTmuU1wzZqItpl7hUGZjWTHxbbA/TojZJlM ofhsj2cQeU6Xalzk6wEaKlg//Z3uanOqlhC5eznNoiy7vBAyM3TTqEmp9VEfa+GqwvDU if6nc6Jl13qCODL+gGZfm80sd2FwF11jhfDLhY3wb4dNpCA4c8ft7gwkpga5ue4l3ohp +bMve351tnafh/cw16pg/Ku+gLDV45jvMP3F8mv6udww0H/OUlPTUwcj4YQWgsqxgaPB RMwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=rC0/8HxIn6G5tQHAQo3wUCz1IT1sbakt4G1fjrSPdIQ=; b=FECZJstuGw0M6DHkYkNrHHUHn2b9GKE7Cp3F9Yp7d9m/v1zdUEWSRMx/mN2cqIN0MH CXCuxWfFVGV2SXxJMFwDoT+JN/5Yair4Kp7wkoXe7DgjGt+XsnB7ad8JoQ/dx3ruTNRX yK+7GnHl+GjRl90j9FnNjMQm7z2oY28u8s2vYpS9fNXGL02fyLLRQyTd6UkZIIN7IVBI Lr+AnDixGMVQEuEP0cThU8+l3eOk8iEgVXTOZn3ZYAn5kxJjYL5xQOCMe9s5QasuaRVs kReIZbporW5vFI/8Q9nnXfSZ73wR7je4mei+ZJapAB0lAxl9jMhwG3jVLKlKN9GA0Op4 wXvg== X-Gm-Message-State: APjAAAUcItaN1/g0ZlitAf+O/T75I2HWrw1q1faNUVxPDAQw7rBCIV5D yry9J82CV1CjzeCJCUDm2ohlBfon X-Google-Smtp-Source: APXvYqwHKfJOASCPLaON0BuQ7B7II2IzF80SVl8DFhNEsxwfhmAuzWtTbg+0+khssNp3D1CFUnCBZg== X-Received: by 2002:a1c:415:: with SMTP id 21mr1646972wme.109.1553816960000; Thu, 28 Mar 2019 16:49:20 -0700 (PDT) Received: from ubuntu.localdomain (91.82.26.103.pool.invitel.hu. [91.82.26.103]) by smtp.gmail.com with ESMTPSA id g8sm637019wro.77.2019.03.28.16.49.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 28 Mar 2019 16:49:19 -0700 (PDT) From: Laszlo Kovacs To: ffmpeg-devel@ffmpeg.org Date: Thu, 28 Mar 2019 16:48:51 -0700 Message-Id: <20190328234851.2223-1-atomantinator@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] Fixed corrupt segment video files when using hls_init_time option. 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: Laszlo Kovacs MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" The problem is an integer overflow on "after_init_list_dur" variable. It happens about 30-40 minutes after starts hls streaming but strongly depends on other options like "start_number" or "hls_list_size". VOD or EVENT hls playlist types are not affected by this bug. (P.S. I hope this text will be the body and not the subject :) ) --- libavformat/hlsenc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 5f9a200c6e..2e8bcab571 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -2195,8 +2195,9 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) if (vs->sequence - vs->nb_entries > hls->start_sequence && hls->init_time > 0) { /* reset end_pts, hls->recording_time at end of the init hls list */ - int init_list_dur = hls->init_time * vs->nb_entries * AV_TIME_BASE; - int after_init_list_dur = (vs->sequence - hls->start_sequence - vs->nb_entries ) * (hls->time * AV_TIME_BASE); + int64_t init_list_dur = hls->init_time * vs->nb_entries * AV_TIME_BASE; + int64_t after_init_list_dur = hls->time * AV_TIME_BASE; + after_init_list_dur *= vs->sequence - hls->start_sequence - vs->nb_entries; hls->recording_time = hls->time * AV_TIME_BASE; end_pts = init_list_dur + after_init_list_dur ; }