[FFmpeg-trac] #6533(avformat:reopened): Invalid EXT-X-TARGETDURATION in HLS
FFmpeg
trac at avcodec.org
Thu Aug 10 11:59:16 EEST 2017
#6533: Invalid EXT-X-TARGETDURATION in HLS
-------------------------------------+------------------------------------
Reporter: tonn81 | Owner:
Type: defect | Status: reopened
Priority: normal | Component: avformat
Version: unspecified | Resolution:
Keywords: hls | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+------------------------------------
Comment (by stevenliu):
Replying to [comment:6 tonn81]:
> Replying to [comment:5 stevenliu]:
> > > ffmpeg should generate chunks not longer than given with
`--hls_time`. For `--hls_time 4` it generated `4.02` chunk instead of
`4.0` or less.
> > Write a full frame is better than half frame. for example, the frame
duration is 40, the frame sequence is: IPPIPPIPP, if the hls_time is set
to 100ms. Do you mean it should split IP and half of next P and leave the
other half to the next segment? Or leave the full P frame to the next
segment start frame to make sure the hls_time 0.100?
>
> I cannot tell here. I just see that chunk duration is longer than
requested.
It's is longer but it is the segment logic need.
yes , if you want to fix it, and you need me to fix it, i can sent a patch
to you , but i cannot applied it into ffmpeg hlsenc now, because it maybe
will make some new bugs, one of the bugs is the describe above.
>
> > > 2. **ffmpeg converts chunk duration into `EXT-X-TARGETDURATION`
incorrectly**
> > >
> > > According to official HLS validator (`mediastreamvalidator`),
there could be 25% difference between actual chunk size and value. That
means we should not ceil the value but rather round to nearest integer (so
that delta between maximum chunk duration and `TARGETDURATION` is
minimal). Then `4.02` would become `4`, not `5`.
> > Reference Spec:
> >
> > https://tools.ietf.org/html/draft-pantos-http-live-
streaming-22#page-49
> >
> > 4.3.3.1. EXT-X-TARGETDURATION
> >
> > The EXT-X-TARGETDURATION tag specifies the maximum Media Segment
> > duration. The EXTINF duration of each Media Segment in the
Playlist
> > file, when rounded to the nearest integer, MUST be less than or
equal
> > to the target duration; longer segments can trigger playback stalls
> > or other errors.
>
> In other words, we take maximum chunk duration (`4.02`), round to
nearest integer (`4`). Then `EXT-X-TARGETDURATION` should be greater or
equal to this `4`.
>
> Technically, `5` also matches the specification in this case (`4 <= 5`)
but `4` is more precise AND more logical having in mind `-hls_time 4`
given.
>
> So my proposal matches the specification -- we should round maximum
chunk duration to nearest integer, not ceil it.
The specification said, the target duration should greater than segment
duration , (The EXTINF duration of each Media Segment in the Playlist
file, when rounded to the nearest integer, MUST be less than or equal to
the target duration;) it said *MUST*.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/6533#comment:7>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list