diff options
author | MrBoogs <blendz@shaw.ca> | 2015-04-21 15:46:17 -0600 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-05-17 17:11:44 +0200 |
commit | 8fd01b4a794c1e5fd3888256b816b30023a2d856 (patch) | |
tree | e13bf85c052e3ef835cac5727234909d49773752 | |
parent | b6fcb2bb6db1bf28e2d11f244448703998ea5428 (diff) | |
download | ffmpeg-8fd01b4a794c1e5fd3888256b816b30023a2d856.tar.gz |
avformat/hlsenc: Add hls flag for rounding m3u8 durations to whole numbers, problems with floats on some devices
Reviewed-by: Thomas Volkert <silvo@gmx.net>
-rw-r--r-- | libavformat/hlsenc.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 788535162a..dcb718a976 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -50,6 +50,7 @@ typedef enum HLSFlags { // Generate a single media file and use byte ranges in the playlist. HLS_SINGLE_FILE = (1 << 0), HLS_DELETE_SEGMENTS = (1 << 1), + HLS_ROUND_DURATIONS = (1 << 2), } HLSFlags; typedef struct HLSContext { @@ -274,7 +275,10 @@ static int hls_window(AVFormatContext *s, int last) sequence); for (en = hls->segments; en; en = en->next) { - avio_printf(out, "#EXTINF:%f,\n", en->duration); + if (hls->flags & HLS_ROUND_DURATIONS) + avio_printf(out, "#EXTINF:%d,\n", (int)round(en->duration)); + else + avio_printf(out, "#EXTINF:%f,\n", en->duration); if (hls->flags & HLS_SINGLE_FILE) avio_printf(out, "#EXT-X-BYTERANGE:%"PRIi64"@%"PRIi64"\n", en->size, en->pos); @@ -512,6 +516,8 @@ static const AVOption options[] = { {"hls_flags", "set flags affecting HLS playlist and media file generation", OFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0 }, 0, UINT_MAX, E, "flags"}, {"single_file", "generate a single media file indexed with byte ranges", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_SINGLE_FILE }, 0, UINT_MAX, E, "flags"}, {"delete_segments", "delete segment files that are no longer part of the playlist", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_DELETE_SEGMENTS }, 0, UINT_MAX, E, "flags"}, + {"round_durations", "round durations in m3u8 to whole numbers", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_ROUND_DURATIONS }, 0, UINT_MAX, E, "flags"}, + { NULL }, }; |