[FFmpeg-devel] [PATCH] avformat/hlsenc: fix hls fmp4 extention name bug
Steven Liu
lq at chinaffmpeg.org
Thu Jul 20 09:08:24 EEST 2017
ticket-id: #6541
when use hls fmp4 muxer, the extention name is not .m4s, this code can
fix it.
Signed-off-by: Steven Liu <lq at onvideo.cn>
---
libavformat/hlsenc.c | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index 8a233270b5..65650e03a4 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -1286,14 +1286,19 @@ fail:
return err;
}
-static const char * get_default_pattern_localtime_fmt(void)
+static const char * get_default_pattern_localtime_fmt(AVFormatContext *s)
{
char b[21];
time_t t = time(NULL);
struct tm *p, tmbuf;
+ HLSContext *hls = s->priv_data;
+
p = localtime_r(&t, &tmbuf);
// no %s support when strftime returned error or left format string unchanged
// also no %s support on MSVC, which invokes the invalid parameter handler on unsupported format strings, instead of returning an error
+ if (hls->segment_type == SEGMENT_TYPE_FMP4) {
+ return (HAVE_LIBC_MSVCRT || !strftime(b, sizeof(b), "%s", p) || !strcmp(b, "%s")) ? "-%Y%m%d%H%M%S.m4s" : "-%s.m4s";
+ }
return (HAVE_LIBC_MSVCRT || !strftime(b, sizeof(b), "%s", p) || !strcmp(b, "%s")) ? "-%Y%m%d%H%M%S.ts" : "-%s.ts";
}
@@ -1303,16 +1308,19 @@ static int hls_write_header(AVFormatContext *s)
int ret, i;
char *p;
const char *pattern = "%d.ts";
- const char *pattern_localtime_fmt = get_default_pattern_localtime_fmt();
+ const char *pattern_localtime_fmt = get_default_pattern_localtime_fmt(s);
const char *vtt_pattern = "%d.vtt";
AVDictionary *options = NULL;
int byterange_mode = (hls->flags & HLS_SINGLE_FILE) || (hls->max_seg_size > 0);
int basename_size;
int vtt_basename_size;
- if (hls->segment_type == SEGMENT_TYPE_FMP4 && byterange_mode) {
- av_log(s, AV_LOG_WARNING, "Have not support fmp4 byterange mode yet now\n");
- return AVERROR_PATCHWELCOME;
+ if (hls->segment_type == SEGMENT_TYPE_FMP4) {
+ if (byterange_mode) {
+ av_log(s, AV_LOG_WARNING, "Have not support fmp4 byterange mode yet now\n");
+ return AVERROR_PATCHWELCOME;
+ }
+ pattern = "%d.m4s";
}
if ((hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_SECONDS_SINCE_EPOCH) ||
(hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_FORMATTED_DATETIME)) {
@@ -1391,6 +1399,9 @@ static int hls_write_header(AVFormatContext *s)
if (hls->flags & HLS_SINGLE_FILE)
pattern = ".ts";
+ if (hls->segment_type == SEGMENT_TYPE_FMP4)
+ pattern = "m4s";
+
if (hls->use_localtime) {
basename_size = strlen(s->filename) + strlen(pattern_localtime_fmt) + 1;
} else {
--
2.11.0 (Apple Git-81)
More information about the ffmpeg-devel
mailing list