diff --git a/ffmpeg.c b/ffmpeg.c
index ba9aa027b44332e954cdbc66b4ffaa9ff6663497..bbcf99851938964d8f2b2460d0658e645e843537 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -3096,7 +3096,7 @@ static void opt_output_file(const char *filename)
             if(video_codec_tag)
                 video_enc->codec_tag= video_codec_tag;
                 
-            if(!strcmp(file_oformat->name, "mp4") || !strcmp(file_oformat->name, "mov") || !strcmp(file_oformat->name, "3gp"))
+            if (file_oformat->flags & AVFMT_GLOBALHEADER) 
                 video_enc->flags |= CODEC_FLAG_GLOBAL_HEADER;
             if (video_stream_copy) {
                 st->stream_copy = 1;
@@ -3367,7 +3367,7 @@ static void opt_output_file(const char *filename)
             if(audio_codec_tag)
                 audio_enc->codec_tag= audio_codec_tag;
 
-            if(!strcmp(file_oformat->name, "mp4") || !strcmp(file_oformat->name, "mov") || !strcmp(file_oformat->name, "3gp"))
+            if (file_oformat->flags & AVFMT_GLOBALHEADER) 
                 audio_enc->flags |= CODEC_FLAG_GLOBAL_HEADER;
             if (audio_stream_copy) {
                 st->stream_copy = 1;
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 6fe15b5b173bd9095da88a64010ce81a6f3fe63e..7beef99999519fd8ad17e2671020932464351272 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -124,6 +124,7 @@ typedef struct AVFormatParameters {
 #define AVFMT_SHOW_IDS      0x0008 /* show format stream IDs numbers */
 #define AVFMT_RAWPICTURE    0x0020 /* format wants AVPicture structure for
                                       raw picture data */
+#define AVFMT_GLOBALHEADER  0x0040 /* format wants global header */
 
 typedef struct AVOutputFormat {
     const char *name;
@@ -138,7 +139,7 @@ typedef struct AVOutputFormat {
     int (*write_header)(struct AVFormatContext *);
     int (*write_packet)(struct AVFormatContext *, AVPacket *pkt);
     int (*write_trailer)(struct AVFormatContext *);
-    /* can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER */
+    /* can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER */
     int flags;
     /* currently only used to set pixel format if not YUV420P */
     int (*set_parameters)(struct AVFormatContext *, AVFormatParameters *);
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index ed9700fcdd05d5659150d44e8639e6d15bc2c4d5..e7b66cdee2951a28a81712ff6e7d3acd88c1effb 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -1497,6 +1497,7 @@ static AVOutputFormat mov_oformat = {
     mov_write_header,
     mov_write_packet,
     mov_write_trailer,
+    .flags = AVFMT_GLOBALHEADER,
 };
 
 static AVOutputFormat _3gp_oformat = {
@@ -1510,6 +1511,7 @@ static AVOutputFormat _3gp_oformat = {
     mov_write_header,
     mov_write_packet,
     mov_write_trailer,
+    .flags = AVFMT_GLOBALHEADER,
 };
 
 static AVOutputFormat mp4_oformat = {
@@ -1523,6 +1525,7 @@ static AVOutputFormat mp4_oformat = {
     mov_write_header,
     mov_write_packet,
     mov_write_trailer,
+    .flags = AVFMT_GLOBALHEADER,
 };
 
 static AVOutputFormat psp_oformat = {
@@ -1536,6 +1539,7 @@ static AVOutputFormat psp_oformat = {
     mov_write_header,
     mov_write_packet,
     mov_write_trailer,
+    .flags = AVFMT_GLOBALHEADER,
 };
 
 static AVOutputFormat _3g2_oformat = {
@@ -1549,6 +1553,7 @@ static AVOutputFormat _3g2_oformat = {
     mov_write_header,
     mov_write_packet,
     mov_write_trailer,
+    .flags = AVFMT_GLOBALHEADER,
 };
 
 int movenc_init(void)