Message ID | CADxeRwmGoEFsJ7jMr_EQhYdokNH9vNR9dx469o6yzznHE48eBQ@mail.gmail.com |
---|---|
State | Superseded |
Headers | show |
Steven Liu <lingjiujianke@gmail.com>于2016年9月9日 周五下午7:59写道: > 2016-09-09 16:33 GMT+08:00 Steven Liu <lingjiujianke@gmail.com>: > >> >> >> 2016-09-09 16:10 GMT+08:00 Steven Liu <lingjiujianke@gmail.com>: >> >>> >>> >>> 2016-09-09 15:33 GMT+08:00 Steven Liu <lingjiujianke@gmail.com>: >>> >>>> >>>> >>>> 2016-09-09 15:28 GMT+08:00 Aman Gupta <aman@tmm1.net>: >>>> >>>>> 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 <lingjiujianke@gmail.com> >>>>> 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 >>>>>> 1da00be009aa74400042bf470b9a5ffbd82a1c5e >>>>>> because the option initial_offset will deprecated >>>>>> >>>>>> Signed-off-by: Steven Liu <lingjiujianke@gmail.com> >>>>>> --- >>>>>> 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 <lingjiujianke@gmail.com> > --- > libavformat/segment.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > 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; > + } > } > } > > @@ -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) > > maybe have a bug, I'll fix it When use all the output_ts_offset and initial_offset it will wrong result.
I confirmed your latest patch fixes the issue and is working as expected now. Thank you! Aman On Sat, Sep 10, 2016 at 7:00 AM, Steven Liu <lingjiujianke@gmail.com> wrote: > > Steven Liu <lingjiujianke@gmail.com>于2016年9月9日 周五下午7:59写道: > >> 2016-09-09 16:33 GMT+08:00 Steven Liu <lingjiujianke@gmail.com>: >> >>> >>> >>> 2016-09-09 16:10 GMT+08:00 Steven Liu <lingjiujianke@gmail.com>: >>> >>>> >>>> >>>> 2016-09-09 15:33 GMT+08:00 Steven Liu <lingjiujianke@gmail.com>: >>>> >>>>> >>>>> >>>>> 2016-09-09 15:28 GMT+08:00 Aman Gupta <aman@tmm1.net>: >>>>> >>>>>> 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 <lingjiujianke@gmail.com> >>>>>> 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 <lingjiujianke@gmail.com> >>>>>>> --- >>>>>>> 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 1da00be009aa74400042bf470b9a5f >> fbd82a1c5e >> because the option initial_offset will deprecated >> >> Signed-off-by: Steven Liu <lingjiujianke@gmail.com> >> --- >> libavformat/segment.c | 12 +++++++++++- >> 1 file changed, 11 insertions(+), 1 deletion(-) >> >> 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; >> + } >> } >> } >> >> @@ -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) >> >> maybe have a bug, I'll fix it > When use all the output_ts_offset and initial_offset it will wrong result. >
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; + } }