mirror of https://git.ffmpeg.org/ffmpeg.git
add split_by_time flag for support splite mpegts segment at non-keyframe
support split hls segment at duration set by hls_time Signed-off-by: LiuQi <liuqi@gosun.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
593987810e
commit
b45a976ed4
|
@ -495,6 +495,12 @@ Will produce the playlist, @file{out.m3u8}, and a single segment file,
|
||||||
Segment files removed from the playlist are deleted after a period of time
|
Segment files removed from the playlist are deleted after a period of time
|
||||||
equal to the duration of the segment plus the duration of the playlist.
|
equal to the duration of the segment plus the duration of the playlist.
|
||||||
|
|
||||||
|
@item hls_flags split_by_time
|
||||||
|
If this flags is set, allow segments to start on frames other than keyframes.
|
||||||
|
Thisimproves behavior on some players when the time between keyframes is
|
||||||
|
inconsistent, but may make things worse on others, and can cause some oddities
|
||||||
|
during seeking. This flag should be used with hls_time option.
|
||||||
|
|
||||||
@item hls_playlist_type event
|
@item hls_playlist_type event
|
||||||
Emit @code{#EXT-X-PLAYLIST-TYPE:EVENT} in the m3u8 header. Forces
|
Emit @code{#EXT-X-PLAYLIST-TYPE:EVENT} in the m3u8 header. Forces
|
||||||
@option{hls_list_size} to 0; the playlist can only be appended to.
|
@option{hls_list_size} to 0; the playlist can only be appended to.
|
||||||
|
|
|
@ -62,6 +62,7 @@ typedef enum HLSFlags {
|
||||||
HLS_ROUND_DURATIONS = (1 << 2),
|
HLS_ROUND_DURATIONS = (1 << 2),
|
||||||
HLS_DISCONT_START = (1 << 3),
|
HLS_DISCONT_START = (1 << 3),
|
||||||
HLS_OMIT_ENDLIST = (1 << 4),
|
HLS_OMIT_ENDLIST = (1 << 4),
|
||||||
|
HLS_SPLIT_BY_TIME = (1 << 5),
|
||||||
} HLSFlags;
|
} HLSFlags;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -813,7 +814,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||||
|
|
||||||
if (hls->has_video) {
|
if (hls->has_video) {
|
||||||
can_split = st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&
|
can_split = st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&
|
||||||
pkt->flags & AV_PKT_FLAG_KEY;
|
((pkt->flags & AV_PKT_FLAG_KEY) || (hls->flags & HLS_SPLIT_BY_TIME));
|
||||||
is_ref_pkt = st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO;
|
is_ref_pkt = st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO;
|
||||||
}
|
}
|
||||||
if (pkt->pts == AV_NOPTS_VALUE)
|
if (pkt->pts == AV_NOPTS_VALUE)
|
||||||
|
@ -923,6 +924,7 @@ static const AVOption options[] = {
|
||||||
{"round_durations", "round durations in m3u8 to whole numbers", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_ROUND_DURATIONS }, 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"},
|
||||||
{"discont_start", "start the playlist with a discontinuity tag", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_DISCONT_START }, 0, UINT_MAX, E, "flags"},
|
{"discont_start", "start the playlist with a discontinuity tag", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_DISCONT_START }, 0, UINT_MAX, E, "flags"},
|
||||||
{"omit_endlist", "Do not append an endlist when ending stream", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_OMIT_ENDLIST }, 0, UINT_MAX, E, "flags"},
|
{"omit_endlist", "Do not append an endlist when ending stream", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_OMIT_ENDLIST }, 0, UINT_MAX, E, "flags"},
|
||||||
|
{"split_by_time", "split the hls segment by time which user set by hls_time", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_SPLIT_BY_TIME }, 0, UINT_MAX, E, "flags"},
|
||||||
{"use_localtime", "set filename expansion with strftime at segment creation", OFFSET(use_localtime), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, E },
|
{"use_localtime", "set filename expansion with strftime at segment creation", OFFSET(use_localtime), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, E },
|
||||||
{"use_localtime_mkdir", "create last directory component in strftime-generated filename", OFFSET(use_localtime_mkdir), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, E },
|
{"use_localtime_mkdir", "create last directory component in strftime-generated filename", OFFSET(use_localtime_mkdir), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, E },
|
||||||
{"hls_playlist_type", "set the HLS playlist type", OFFSET(pl_type), AV_OPT_TYPE_INT, {.i64 = PLAYLIST_TYPE_NONE }, 0, PLAYLIST_TYPE_NB-1, E, "pl_type" },
|
{"hls_playlist_type", "set the HLS playlist type", OFFSET(pl_type), AV_OPT_TYPE_INT, {.i64 = PLAYLIST_TYPE_NONE }, 0, PLAYLIST_TYPE_NB-1, E, "pl_type" },
|
||||||
|
|
Loading…
Reference in New Issue