[FFmpeg-devel] [PATCH 4/4] Implement ffserver generic metadata settings in the stream.

Stefano Sabatini stefano.sabatini-lala
Sun Apr 11 20:36:22 CEST 2010


This patch is absolutely untested, if someone wants to try it and report back
that's fine, otherwise maybe I'll do it myself but who can say.

Regards.

---
 ffserver.c |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/ffserver.c b/ffserver.c
index 4404511..7b60517 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -217,6 +217,8 @@ typedef struct FFStream {
     char title[512];
     char copyright[512];
     char comment[512];
+    unsigned metadata_count;
+    AVMetadataTag *metadata;
     pid_t pid;  /* Of ffmpeg process */
     time_t pid_start;  /* Of ffmpeg process */
     char **child_argv;
@@ -2236,6 +2238,10 @@ static int http_prepare_data(HTTPContext *c)
         av_metadata_set(&c->fmt_ctx.metadata, "comment"  ,c->stream->comment);
         av_metadata_set(&c->fmt_ctx.metadata, "copyright",c->stream->copyright);
         av_metadata_set(&c->fmt_ctx.metadata, "title"    ,c->stream->title);
+        for (i = 0; i < c->stream->metadata_count; i++) {
+            AVMetadataTag *tag = &(c->stream->metadata[i]);
+            av_metadata_set(&c->fmt_ctx.metadata, tag->key, tag->value);
+        }
 
         for(i=0;i<c->stream->nb_streams;i++) {
             AVStream *st;
@@ -4257,6 +4263,20 @@ static int parse_ffconfig(const char *filename)
         } else if (!strcasecmp(cmd, "Title")) {
             if (stream)
                 get_arg(stream->title, sizeof(stream->title), &p);
+        } else if (!strcasecmp(cmd, "Metadata")) {
+            if (stream) {
+                char *mid;
+                get_arg(arg, sizeof(arg), &p);
+                if (!(mid = strchr(arg, '=')))
+                    ERROR("Missing '=' in value for Metadata: %s\n", arg);
+                else {
+                    *mid++= 0;
+                    stream->metadata = av_realloc(stream->metadata,
+                                                  sizeof(*stream->metadata) * (++stream->metadata_count));
+                    stream->metadata[stream->metadata_count-1].key  = av_strdup(arg);
+                    stream->metadata[stream->metadata_count-1].value= av_strdup(mid);
+                }
+            }
         } else if (!strcasecmp(cmd, "Preroll")) {
             get_arg(arg, sizeof(arg), &p);
             if (stream)
-- 
1.7.0




More information about the ffmpeg-devel mailing list