aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Liu <lq@chinaffmpeg.org>2017-09-21 23:10:57 +0800
committerSteven Liu <lq@chinaffmpeg.org>2017-09-21 23:10:57 +0800
commitc34c0e3a649eb4fe8e6fb756b7784b7bfd9bd638 (patch)
tree2d4085c20b844ab22930802759cc29510af5d2a1
parent02bf023afe0099d7e9e2f0d683b6345234cefcaf (diff)
downloadffmpeg-c34c0e3a649eb4fe8e6fb756b7784b7bfd9bd638.tar.gz
avformat/hlsenc: support http method for hls fmp4 init file
Signed-off-by: Steven Liu <lq@onvideo.cn>
-rw-r--r--libavformat/hlsenc.c35
1 files changed, 18 insertions, 17 deletions
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index d70a2f7ff6..418f153c6f 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -215,6 +215,22 @@ static int mkdir_p(const char *path) {
return ret;
}
+static void set_http_options(AVFormatContext *s, AVDictionary **options, HLSContext *c)
+{
+ const char *proto = avio_find_protocol_name(s->filename);
+ int http_base_proto = proto ? (!av_strcasecmp(proto, "http") || !av_strcasecmp(proto, "https")) : 0;
+
+ if (c->method) {
+ av_dict_set(options, "method", c->method, 0);
+ } else if (http_base_proto) {
+ av_log(c, AV_LOG_WARNING, "No HTTP method set, hls muxer defaulting to method PUT.\n");
+ av_dict_set(options, "method", "PUT", 0);
+ }
+ if (c->user_agent)
+ av_dict_set(options, "user_agent", c->user_agent, 0);
+
+}
+
static int replace_int_data_in_filename(char *buf, int buf_size, const char *filename, char placeholder, int64_t number)
{
const char *p;
@@ -592,7 +608,8 @@ static int hls_mux_init(AVFormatContext *s)
return AVERROR_PATCHWELCOME;
}
hls->fmp4_init_mode = !byterange_mode;
- if ((ret = s->io_open(s, &oc->pb, hls->base_output_dirname, AVIO_FLAG_WRITE, NULL)) < 0) {
+ set_http_options(s, &options, hls);
+ if ((ret = s->io_open(s, &oc->pb, hls->base_output_dirname, AVIO_FLAG_WRITE, &options)) < 0) {
av_log(s, AV_LOG_ERROR, "Failed to open segment '%s'\n", hls->fmp4_init_filename);
return ret;
}
@@ -964,22 +981,6 @@ static void hls_free_segments(HLSSegment *p)
}
}
-static void set_http_options(AVFormatContext *s, AVDictionary **options, HLSContext *c)
-{
- const char *proto = avio_find_protocol_name(s->filename);
- int http_base_proto = proto ? (!av_strcasecmp(proto, "http") || !av_strcasecmp(proto, "https")) : 0;
-
- if (c->method) {
- av_dict_set(options, "method", c->method, 0);
- } else if (http_base_proto) {
- av_log(c, AV_LOG_WARNING, "No HTTP method set, hls muxer defaulting to method PUT.\n");
- av_dict_set(options, "method", "PUT", 0);
- }
- if (c->user_agent)
- av_dict_set(options, "user_agent", c->user_agent, 0);
-
-}
-
static void write_m3u8_head_block(HLSContext *hls, AVIOContext *out, int version,
int target_duration, int64_t sequence)
{