[FFmpeg-trac] #6533(avformat:reopened): Invalid EXT-X-TARGETDURATION in HLS
FFmpeg
trac at avcodec.org
Thu Aug 10 11:15:21 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:4 tonn81]:
> I would disagree with @stevenliu -- result generated by ffmpeg is not
what is expected -- `TARGETDURATION` does not match the value given as
`--hls_time`.
>
> Actually, there are two bugs in ffmpeg. Together they give this false
result.
>
> Here are the bugs:
>
> 1. **ffmpeg generate HLS chunks with duration that does not match given
`--hls_time`**
>
> 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, 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?
>
> 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. It applies to the entire Playlist file. Its format
is:
#EXT-X-TARGETDURATION:<s>
where s is a decimal-integer indicating the target duration in
seconds. The EXT-X-TARGETDURATION tag is REQUIRED.
>
> I could file another bug report for HLS chunks generation if needed.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/6533#comment:5>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list