[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