[FFmpeg-trac] #7382(avformat:new): ffplay doesn't play dash format with presentationTimeOffset.
FFmpeg
trac at avcodec.org
Wed Aug 29 13:22:45 EEST 2018
#7382: ffplay doesn't play dash format with presentationTimeOffset.
------------------------------------+------------------------------------
Reporter: satbaby | Owner:
Type: defect | Status: new
Priority: normal | Component: avformat
Version: git-master | Resolution:
Keywords: dash | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
------------------------------------+------------------------------------
Changes (by cehoyos):
* keywords: => dash
Old description:
> Summary of the bug:
> here are two examples:
> https://livesim.dashif.org/livesim/periods_60/continuous_1/testpic_2s/Manifest.mpd
> https://akamai-
> axtest.akamaized.net/routes/lapd-v1-acceptance/www_c4/Manifest.mpd
>
> How to reproduce:
> {{{
> ffplay
> https://livesim.dashif.org/livesim/periods_60/continuous_1/testpic_2s/Manifest.mpd
> ffplay version N-91691-g962c9313af Copyright (c) 2003-2018 the FFmpeg
> developers
> built with gcc 8.2.0 (Gentoo 8.2.0-r2 p1.2)
> configuration: --prefix=/mnt/BIG/ffmpeg/root/ --disable-doc --disable-
> stripping --enable-debug=1 --enable-libxml2 --enable-demuxer=dash
> --enable-openssl
> libavutil 56. 19.100 / 56. 19.100
> libavcodec 58. 25.100 / 58. 25.100
> libavformat 58. 17.103 / 58. 17.103
> libavdevice 58. 4.101 / 58. 4.101
> libavfilter 7. 26.100 / 7. 26.100
> libswscale 5. 2.100 / 5. 2.100
> libswresample 3. 2.100 / 3. 2.100
> [dash @ 0x7f2328000b80] Could not read complete fragment.0B f=0/0
> [https @ 0x7f232800aa00] HTTP error 404 Not Found sq= 0B f=0/0
> [dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
> [https @ 0x7f2328017e40] HTTP error 404 Not Found sq= 0B f=0/0
> [dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
> [https @ 0x7f232804a440] HTTP error 404 Not Found sq= 0B f=0/0
> [dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
> [https @ 0x7f2328041240] HTTP error 404 Not Found sq= 0B f=0/0
> [dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
> [https @ 0x7f232804e040] HTTP error 404 Not Found sq= 0B f=0/0
> [dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
> [https @ 0x7f2328041340] HTTP error 404 Not Found sq= 0B f=0/0
> [dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
> [https @ 0x7f2328018580] HTTP error 404 Not Found sq= 0B f=0/0
> [dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
> [https @ 0x7f2328054a40] HTTP error 404 Not Found sq= 0B f=0/0
> [dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
> }}}
> I have patch, but no idea if is correct:
> cat /tmp/try_to_fix_calc_cur_seg_no_with_presentation_timeoffset.diff
> diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c
> index c6dddeb98f..fe6d95102b 100644
> --- a/libavformat/dashdec.c
> +++ b/libavformat/dashdec.c
> @@ -1294,7 +1294,7 @@ static int64_t calc_cur_seg_no(AVFormatContext *s,
> struct representation *pls)
> num += pls->first_seq_no;
> } else if (pls->fragment_duration){
> if (pls->presentation_timeoffset) {
> - num = pls->presentation_timeoffset *
> pls->fragment_timescale / pls->fragment_duration;
> + num = pls->first_seq_no + (((get_current_time_in_sec() *
> pls->fragment_timescale)-pls->presentation_timeoffset) /
> pls->fragment_duration) - 120;
> } else if (c->publish_time > 0 &&
> !c->availability_start_time) {
> num = pls->first_seq_no + (((c->publish_time -
> c->availability_start_time) - c->suggested_presentation_delay) *
> pls->fragment_timescale) / pls->fragment_duration;
> } else {
New description:
Summary of the bug:
here are two examples:
https://livesim.dashif.org/livesim/periods_60/continuous_1/testpic_2s/Manifest.mpd
https://akamai-
axtest.akamaized.net/routes/lapd-v1-acceptance/www_c4/Manifest.mpd
How to reproduce:
{{{
ffplay
https://livesim.dashif.org/livesim/periods_60/continuous_1/testpic_2s/Manifest.mpd
ffplay version N-91691-g962c9313af Copyright (c) 2003-2018 the FFmpeg
developers
built with gcc 8.2.0 (Gentoo 8.2.0-r2 p1.2)
configuration: --prefix=/mnt/BIG/ffmpeg/root/ --disable-doc --disable-
stripping --enable-debug=1 --enable-libxml2 --enable-demuxer=dash
--enable-openssl
libavutil 56. 19.100 / 56. 19.100
libavcodec 58. 25.100 / 58. 25.100
libavformat 58. 17.103 / 58. 17.103
libavdevice 58. 4.101 / 58. 4.101
libavfilter 7. 26.100 / 7. 26.100
libswscale 5. 2.100 / 5. 2.100
libswresample 3. 2.100 / 3. 2.100
[dash @ 0x7f2328000b80] Could not read complete fragment.0B f=0/0
[https @ 0x7f232800aa00] HTTP error 404 Not Found sq= 0B f=0/0
[dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
[https @ 0x7f2328017e40] HTTP error 404 Not Found sq= 0B f=0/0
[dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
[https @ 0x7f232804a440] HTTP error 404 Not Found sq= 0B f=0/0
[dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
[https @ 0x7f2328041240] HTTP error 404 Not Found sq= 0B f=0/0
[dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
[https @ 0x7f232804e040] HTTP error 404 Not Found sq= 0B f=0/0
[dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
[https @ 0x7f2328041340] HTTP error 404 Not Found sq= 0B f=0/0
[dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
[https @ 0x7f2328018580] HTTP error 404 Not Found sq= 0B f=0/0
[dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
[https @ 0x7f2328054a40] HTTP error 404 Not Found sq= 0B f=0/0
[dash @ 0x7f2328000b80] Failed to open fragment of playlist 0
}}}
I have patch, but no idea if is correct:
{{{
cat /tmp/try_to_fix_calc_cur_seg_no_with_presentation_timeoffset.diff
diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c
index c6dddeb98f..fe6d95102b 100644
--- a/libavformat/dashdec.c
+++ b/libavformat/dashdec.c
@@ -1294,7 +1294,7 @@ static int64_t calc_cur_seg_no(AVFormatContext *s,
struct representation *pls)
num += pls->first_seq_no;
} else if (pls->fragment_duration){
if (pls->presentation_timeoffset) {
- num = pls->presentation_timeoffset *
pls->fragment_timescale / pls->fragment_duration;
+ num = pls->first_seq_no + (((get_current_time_in_sec() *
pls->fragment_timescale)-pls->presentation_timeoffset) /
pls->fragment_duration) - 120;
} else if (c->publish_time > 0 &&
!c->availability_start_time) {
num = pls->first_seq_no + (((c->publish_time -
c->availability_start_time) - c->suggested_presentation_delay) *
pls->fragment_timescale) / pls->fragment_duration;
} else {
}}}
--
Comment:
Please send your patch - made with `git format-patch` - to the FFmpeg
development mailing list, patches are ignored on this bug tracker.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/7382#comment:1>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list