diff mbox

[FFmpeg-devel] libavformat/webm_chunk: Option to specify HTTP header

Message ID 1473797566-623-1-git-send-email-vigneshv@google.com
State Superseded
Headers show

Commit Message

Vignesh Venkatasubramanian Sept. 13, 2016, 8:12 p.m. UTC
Add an option to specify HTTP header in the WebM Chunk Muxer (this
works the same way as the 'method' parameter in the HLS muxer).

Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com>
---
 libavformat/webm_chunk.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

Comments

Carl Eugen Hoyos Sept. 14, 2016, 3:46 p.m. UTC | #1
2016-09-13 22:12 GMT+02:00 Vignesh Venkatasubramanian
<vigneshv-at-google.com@ffmpeg.org>:
> Add an option to specify HTTP header in the WebM Chunk Muxer

> (this works the same way as the 'method' parameter in the HLS muxer).

If it is the same option, why does it have another name?
(If the new name is better, maybe update the hls muxer.)

Carl Eugen
Vignesh Venkatasubramanian Sept. 15, 2016, 9:30 p.m. UTC | #2
On Wed, Sep 14, 2016 at 8:46 AM, Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:
>
> 2016-09-13 22:12 GMT+02:00 Vignesh Venkatasubramanian
> <vigneshv-at-google.com@ffmpeg.org>:
> > Add an option to specify HTTP header in the WebM Chunk Muxer
>
> > (this works the same way as the 'method' parameter in the HLS muxer).
>
> If it is the same option, why does it have another name?
> (If the new name is better, maybe update the hls muxer.)
>

I just realized that this option is FFmpeg-wide and not specific to
the HLS muxer. So i've renamed it to 'method'.

> Carl Eugen
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
diff mbox

Patch

diff --git a/libavformat/webm_chunk.c b/libavformat/webm_chunk.c
index bfcde78..4c22c45 100644
--- a/libavformat/webm_chunk.c
+++ b/libavformat/webm_chunk.c
@@ -50,6 +50,7 @@  typedef struct WebMChunkContext {
     char *header_filename;
     int chunk_duration;
     int chunk_index;
+    char *http_method;
     uint64_t duration_written;
     int prev_pts;
     AVOutputFormat *oformat;
@@ -112,6 +113,7 @@  static int webm_chunk_write_header(AVFormatContext *s)
     AVFormatContext *oc = NULL;
     int ret;
     int i;
+    AVDictionary *options = NULL;
 
     // DASH Streams can only have either one track per file.
     if (s->nb_streams != 1) { return AVERROR_INVALIDDATA; }
@@ -128,7 +130,10 @@  static int webm_chunk_write_header(AVFormatContext *s)
     ret = get_chunk_filename(s, 1, oc->filename);
     if (ret < 0)
         return ret;
-    ret = s->io_open(s, &oc->pb, oc->filename, AVIO_FLAG_WRITE, NULL);
+    if (wc->http_method)
+        av_dict_set(&options, "method", wc->http_method, 0);
+    ret = s->io_open(s, &oc->pb, oc->filename, AVIO_FLAG_WRITE, &options);
+    av_dict_free(&options);
     if (ret < 0)
         return ret;
 
@@ -166,6 +171,7 @@  static int chunk_end(AVFormatContext *s)
     uint8_t *buffer;
     AVIOContext *pb;
     char filename[MAX_FILENAME_SIZE];
+    AVDictionary *options = NULL;
 
     if (wc->chunk_start_index == wc->chunk_index)
         return 0;
@@ -175,13 +181,16 @@  static int chunk_end(AVFormatContext *s)
     ret = get_chunk_filename(s, 0, filename);
     if (ret < 0)
         goto fail;
-    ret = s->io_open(s, &pb, filename, AVIO_FLAG_WRITE, NULL);
+    if (wc->http_method)
+        av_dict_set(&options, "method", wc->http_method, 0);
+    ret = s->io_open(s, &pb, filename, AVIO_FLAG_WRITE, &options);
     if (ret < 0)
         goto fail;
     avio_write(pb, buffer, buffer_size);
     ff_format_io_close(s, &pb);
     oc->pb = NULL;
 fail:
+    av_dict_free(&options);
     av_free(buffer);
     return (ret < 0) ? ret : 0;
 }
@@ -243,6 +252,7 @@  static const AVOption options[] = {
     { "chunk_start_index",  "start index of the chunk", OFFSET(chunk_start_index), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM },
     { "header", "filename of the header where the initialization data will be written", OFFSET(header_filename), AV_OPT_TYPE_STRING, { 0 }, 0, 0, AV_OPT_FLAG_ENCODING_PARAM },
     { "audio_chunk_duration", "duration of each chunk in milliseconds", OFFSET(chunk_duration), AV_OPT_TYPE_INT, {.i64 = 5000}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM },
+    { "http_method", "set the HTTP method", OFFSET(http_method), AV_OPT_TYPE_STRING, {.str = NULL},  0, 0, AV_OPT_FLAG_ENCODING_PARAM },
     { NULL },
 };