From patchwork Fri Sep 9 11:59:19 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Steven Liu X-Patchwork-Id: 491 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.134 with SMTP id o128csp279911vsd; Fri, 9 Sep 2016 04:59:32 -0700 (PDT) X-Received: by 10.194.229.34 with SMTP id sn2mr3110277wjc.117.1473422372659; Fri, 09 Sep 2016 04:59:32 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i130si2636275wme.120.2016.09.09.04.59.30; Fri, 09 Sep 2016 04:59:32 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F192E689E99; Fri, 9 Sep 2016 14:59:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f173.google.com (mail-qk0-f173.google.com [209.85.220.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C8A6668998B for ; Fri, 9 Sep 2016 14:59:10 +0300 (EEST) Received: by mail-qk0-f173.google.com with SMTP id v123so78926826qkh.2 for ; Fri, 09 Sep 2016 04:59:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=Q/YhBNqxb4IQORxj9zLC+KD/H4A+D+4ZwLpnwb6IvLI=; b=q4yb/iL96hv0gtioTaIhrpCMSiwXTRFb/L+PMyF+4CO4sm/iJADToOY67AgcnhcXgS x9KnUGX1j0NwVvtPEc73UP039r0NA4bZnOf/6GBcA2SMr3fc8kLIg7bdeu+yxcbZi1NE GdSdR7yYf1dlwVR56mO0n26mu0xl8062AxsRbX53wcRRJmr96ixvX6YN9KlBSPn/wb3o FpwpRXHypC+HaQgn3NNty3YbkZXoJ62e8oqz7lLYWg7KnLSY170sZQS0hXZfWvdB3SzQ ee0THfQowBS13vPCaITtanJEI2KS2VRFh/p9AM0WnDNVGm1uCYpcvSlAPBRR+X2+IQvi rRSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=Q/YhBNqxb4IQORxj9zLC+KD/H4A+D+4ZwLpnwb6IvLI=; b=KF9Pp81XIw3JIeOJVju3uMvFoUU0F6XzIedCvpVbjwfoWJ35jaXHubujqWuycZ4plj LreaM67JgyXEvGJZ7E+qa6qy2bLmjtBVCqInspa7TtmPVJ6mRfUJLCcUcwQmeo23wN6i GJ/EJpaFUNQSyfZQu44xEFgGj1reLJsHkDf9d/bqxHxGCMrIfzohIJzpmx9XLXYS2RAM rzSdUIV/34u5GIDZfWQmcp8OROhtL1Q5+S6hvnJPLk8sCkmgaPNkaLyQjB0dOsyNQ4NC SUY2n4y3EJatodIkKNALxCncb7lJ2azlpzZp+JFVMBoDfO7aw7dd0UHKJKaXG/BzgP4e 2Atg== X-Gm-Message-State: AE9vXwOf0MHa8cbMn59eO201YNHMVT+GPAKG8TEmACruyP8tD/FzBcChjq7IKbsYO+NAi20vgQnAtuIuHVrflQ== X-Received: by 10.55.76.131 with SMTP id z125mr3605742qka.184.1473422360151; Fri, 09 Sep 2016 04:59:20 -0700 (PDT) MIME-Version: 1.0 Received: by 10.237.56.42 with HTTP; Fri, 9 Sep 2016 04:59:19 -0700 (PDT) In-Reply-To: References: From: Steven Liu Date: Fri, 9 Sep 2016 19:59:19 +0800 Message-ID: To: Aman Gupta , FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.20 Subject: Re: [FFmpeg-devel] [PATCH] avformat/segment: fix the duration error of use output_ts_offset 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 2016-09-09 16:33 GMT+08:00 Steven Liu : > > > 2016-09-09 16:10 GMT+08:00 Steven Liu : > >> >> >> 2016-09-09 15:33 GMT+08:00 Steven Liu : >> >>> >>> >>> 2016-09-09 15:28 GMT+08:00 Aman Gupta : >>> >>>> I tried your patch and TARGETDURATION is fixed, but it is still >>>> creating some segments which are only 0.2s instead of 2s. >>>> >>>> Aman >>>> >>>> On Thu, Sep 8, 2016 at 8:14 PM, Steven Liu >>>> wrote: >>>> >>>>> This patch can merge with 1da00be009aa74400042bf470b9a5ffbd82a1c5e >>>>> i have checked this modify: >>>>> >>>>> ./ffmpeg -i ~/facebook.mp4 -c copy -f segment -segment_time 2 >>>>> -output_ts_offset 80 -segment_list output-test.m3u8 -v debug >>>>> output-test-%03d.ts >>>>> >>>>> #EXTM3U >>>>> #EXT-X-VERSION:3 >>>>> #EXT-X-MEDIA-SEQUENCE:0 >>>>> #EXT-X-ALLOW-CACHE:YES >>>>> #EXT-X-TARGETDURATION:10 >>>>> #EXTINF:4.120000, >>>>> output-test-000.ts >>>>> #EXTINF:7.840000, >>>>> output-test-001.ts >>>>> #EXTINF:4.200000, >>>>> output-test-002.ts >>>>> #EXTINF:2.920000, >>>>> output-test-003.ts >>>>> #EXTINF:1.840000, >>>>> output-test-004.ts >>>>> #EXTINF:2.240000, >>>>> output-test-005.ts >>>>> #EXTINF:2.000000, >>>>> output-test-006.ts >>>>> #EXTINF:3.560000, >>>>> >>>>> >>>>> [root@localhost linux]# ffmpeg -i output-test.m3u8 >>>>> ffmpeg version N-80917-ga1a240b Copyright (c) 2000-2016 the FFmpeg >>>>> developers >>>>> built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-17) >>>>> configuration: --prefix=/usr/ --libdir=/usr/lib64 --enable-libx264 >>>>> --enable-libfaac --enable-gpl --enable-nonfree >>>>> libavutil 55. 28.100 / 55. 28.100 >>>>> libavcodec 57. 48.102 / 57. 48.102 >>>>> libavformat 57. 41.100 / 57. 41.100 >>>>> libavdevice 57. 0.102 / 57. 0.102 >>>>> libavfilter 6. 47.100 / 6. 47.100 >>>>> libswscale 4. 1.100 / 4. 1.100 >>>>> libswresample 2. 1.100 / 2. 1.100 >>>>> libpostproc 54. 0.100 / 54. 0.100 >>>>> Input #0, hls,applehttp, from 'output-test.m3u8': >>>>> Duration: 00:03:21.04, start: 81.400000, bitrate: 0 kb/s >>>>> Program 0 >>>>> Metadata: >>>>> variant_bitrate : 0 >>>>> Stream #0:0: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, >>>>> 720x528 [SAR 1:1 DAR 15:11], 25 fps, 25 tbr, 90k tbn, 50 tbc >>>>> Stream #0:1: Audio: ac3 ([129][0][0][0] / 0x0081), 48000 Hz, >>>>> 5.1(side), fltp, 384 kb/s >>>>> At least one output file must be specified >>>>> >>>>> >>>>> >>>>> [root@localhost linux]# ffmpeg -i output-test-000.ts -i >>>>> output-test-001.ts >>>>> ffmpeg version N-80917-ga1a240b Copyright (c) 2000-2016 the FFmpeg >>>>> developers >>>>> built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-17) >>>>> configuration: --prefix=/usr/ --libdir=/usr/lib64 --enable-libx264 >>>>> --enable-libfaac --enable-gpl --enable-nonfree >>>>> libavutil 55. 28.100 / 55. 28.100 >>>>> libavcodec 57. 48.102 / 57. 48.102 >>>>> libavformat 57. 41.100 / 57. 41.100 >>>>> libavdevice 57. 0.102 / 57. 0.102 >>>>> libavfilter 6. 47.100 / 6. 47.100 >>>>> libswscale 4. 1.100 / 4. 1.100 >>>>> libswresample 2. 1.100 / 2. 1.100 >>>>> libpostproc 54. 0.100 / 54. 0.100 >>>>> Input #0, mpegts, from 'output-test-000.ts': >>>>> Duration: 00:00:04.12, start: 81.400000, bitrate: 1299 kb/s >>>>> Program 1 >>>>> Metadata: >>>>> service_name : Service01 >>>>> service_provider: FFmpeg >>>>> Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), >>>>> yuv420p, 720x528 [SAR 1:1 DAR 15:11], 25 fps, 25 tbr, 90k tbn, 50 tbc >>>>> Stream #0:1[0x101](und): Audio: ac3 ([129][0][0][0] / 0x0081), >>>>> 48000 Hz, 5.1(side), fltp, 384 kb/s >>>>> Input #1, mpegts, from 'output-test-001.ts': >>>>> Duration: 00:00:07.90, start: 85.464000, bitrate: 1679 kb/s >>>>> Program 1 >>>>> Metadata: >>>>> service_name : Service01 >>>>> service_provider: FFmpeg >>>>> Stream #1:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), >>>>> yuv420p, 720x528 [SAR 1:1 DAR 15:11], 25 fps, 25 tbr, 90k tbn, 50 tbc >>>>> Stream #1:1[0x101](und): Audio: ac3 ([129][0][0][0] / 0x0081), >>>>> 48000 Hz, 5.1(side), fltp, 384 kb/s >>>>> At least one output file must be specified >>>>> [root@localhost linux]# >>>>> >>>>> >>>>> >>>>> >>>>> this commit is used for fix commit 1da00be009aa74400042bf470b9a5f >>>>> fbd82a1c5e >>>>> because the option initial_offset will deprecated >>>>> >>>>> Signed-off-by: Steven Liu >>>>> --- >>>>> libavformat/segment.c | 5 +++++ >>>>> 1 files changed, 5 insertions(+), 0 deletions(-) >>>>> >>>>> diff --git a/libavformat/segment.c b/libavformat/segment.c >>>>> index 33a5cf0..252f8b1 100644 >>>>> --- a/libavformat/segment.c >>>>> +++ b/libavformat/segment.c >>>>> @@ -885,6 +885,11 @@ calc_times: >>>>> av_log(s, AV_LOG_VERBOSE, "segment:'%s' starts with packet >>>>> stream:%d pts:%s pts_time:%s frame:%d\n", >>>>> seg->avf->filename, pkt->stream_index, >>>>> av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, >>>>> &st->time_base), seg->frame_count); >>>>> + seg->cut_pending = 0; >>>>> + seg->cur_entry.index = seg->segment_idx + >>>>> seg->segment_idx_wrap * seg->segment_idx_wrap_nb; >>>>> + seg->cur_entry.start_time = (double)pkt->pts * >>>>> av_q2d(st->time_base); >>>>> + seg->cur_entry.start_pts = av_rescale_q(pkt->pts, >>>>> st->time_base, AV_TIME_BASE_Q); >>>>> + seg->cur_entry.end_time = seg->cur_entry.start_time; >>>>> } >>>>> >>>>> av_log(s, AV_LOG_DEBUG, "stream:%d start_pts_time:%s pts:%s >>>>> pts_time:%s dts:%s dts_time:%s", >>>>> -- >>>>> 1.7.1 >>>>> >>>> >>>> ok, let me try your command line >>> >>> >> ...... >> it's reproduced when encode by default(video:mpeg2video audio: mp2) >> >> Ha, interesting, > /ffmpeg -ss 20 -i ~/Movies/objectC/facebook.mp4 -g 50 -f segment > -segment_time 2 -segment_start_number 10 -output_ts_offset 40 > -segment_list output-test.m3u8 -v debug output-test-%03d.ts > > no problem > > ./ffmpeg -ss 20 -i ~/Movies/objectC/facebook.mp4 -c:v mpeg2video -g 50 -f > segment -segment_time 2 -segment_start_number 10 -output_ts_offset 40 > -segment_list output-test.m3u8 -v debug output-test-%03d.ts > > no problem > > ./ffmpeg -ss 20 -i ~/Movies/objectC/facebook.mp4 -c:v libx264 -g 50 -f > segment -segment_time 2 -segment_start_number 10 -output_ts_offset 40 > -segment_list output-test.m3u8 -v debug output-test-%03d.ts > > no problem > > > ./ffmpeg -ss 20 -i ~/Movies/objectC/facebook.mp4 -c copy -f segment > -segment_time 2 -segment_start_number 10 -output_ts_offset 40 > -segment_list output-test.m3u8 -v debug output-test-%03d.ts > > no problem > > > ./ffmpeg -ss 20 -i ~/Movies/objectC/facebook.mp4 -f segment -segment_time > 2 -segment_start_number 10 -output_ts_offset 40 -segment_list > output-test.m3u8 -v debug output-test-%03d.ts > > reproduced > > > patch update, no problem now. ./ffmpeg -ss 40 -i ~/Movies/objectC/facebook.mp4 -f segment -segment_time 2 -output_ts_offset 40 -segment_list output-test.m3u8 -segment_start_number 10 -t 12 output-test-%03d.ts no problem #EXTM3U #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:10 #EXT-X-ALLOW-CACHE:YES #EXT-X-TARGETDURATION:3 #EXTINF:2.400000, output-test-010.ts #EXTINF:2.040000, output-test-011.ts #EXTINF:1.920000, output-test-012.ts #EXTINF:1.920000, output-test-013.ts #EXTINF:1.920000, output-test-014.ts #EXTINF:1.800000, output-test-015.ts #EXT-X-ENDLIST this commit is used for fix commit 1da00be009aa74400042bf470b9a5ffbd82a1c5e because the option initial_offset will deprecated Signed-off-by: Steven Liu --- libavformat/segment.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) } @@ -885,6 +891,10 @@ calc_times: av_log(s, AV_LOG_VERBOSE, "segment:'%s' starts with packet stream:%d pts:%s pts_time:%s frame:%d\n", seg->avf->filename, pkt->stream_index, av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &st->time_base), seg->frame_count); + seg->cur_entry.index = seg->segment_idx + seg->segment_idx_wrap * seg->segment_idx_wrap_nb; + seg->cur_entry.start_time = (double)pkt->pts * av_q2d(st->time_base); + seg->cur_entry.start_pts = av_rescale_q(pkt->pts, st->time_base, AV_TIME_BASE_Q); + seg->cur_entry.end_time = seg->cur_entry.start_time; } av_log(s, AV_LOG_DEBUG, "stream:%d start_pts_time:%s pts:%s pts_time:%s dts:%s dts_time:%s", -- 2.7.4 (Apple Git-66) diff --git a/libavformat/segment.c b/libavformat/segment.c index 33a5cf0..74ffe03 100644 --- a/libavformat/segment.c +++ b/libavformat/segment.c @@ -101,6 +101,7 @@ typedef struct SegmentContext { char *times_str; ///< segment times specification string int64_t *times; ///< list of segment interval specification int nb_times; ///< number of elments in the times array + int64_t init_time; ///< first segment start time char *frames_str; ///< segment frame numbers specification string int *frames; ///< list of frame number specification @@ -642,6 +643,7 @@ static int seg_init(AVFormatContext *s) int ret; int i; + seg->init_time = 0; seg->segment_count = 0; if (!seg->write_header_trailer) seg->individual_header_trailer = 0; @@ -837,7 +839,11 @@ calc_times: } seg->last_val = wrapped_val; } else { - end_pts = seg->time * (seg->segment_count + 1); + if (seg->init_time == 0) { + seg->init_time = av_rescale_q(pkt->pts, st->time_base, AV_TIME_BASE_Q); + } else { + end_pts = seg->time * (seg->segment_count + 1) + seg->init_time; + } }