diff --git a/libavformat/utils.c b/libavformat/utils.c
index c49547cdb503c33da28f1ae5ad735061a75ee1f6..3848fb1f6d322c68739bd70e02f6d2f88c21a8e2 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2253,9 +2253,11 @@ int av_write_header(AVFormatContext *s)
         }
     }
 
-    ret = s->oformat->write_header(s);
-    if (ret < 0)
-        return ret;
+    if(s->oformat->write_header){
+        ret = s->oformat->write_header(s);
+        if (ret < 0)
+            return ret;
+    }
 
     /* init PTS generation */
     for(i=0;i<s->nb_streams;i++) {
@@ -2540,7 +2542,8 @@ int av_write_trailer(AVFormatContext *s)
             goto fail;
     }
 
-    ret = s->oformat->write_trailer(s);
+    if(s->oformat->write_trailer)
+        ret = s->oformat->write_trailer(s);
 fail:
     if(ret == 0)
        ret=url_ferror(&s->pb);