]> git.sesse.net Git - nageru/commitdiff
Start a mux only on a keyframe, so that transcoding clients do not get too confused.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 1 Apr 2016 08:34:32 +0000 (10:34 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 1 Apr 2016 08:34:32 +0000 (10:34 +0200)
httpd.cpp
httpd.h

index b9b1d6f10fe7a920b836e45a4531977dbcb2af24..6a92699936c45ef3a0c324064512af69abd2d2b8 100644 (file)
--- a/httpd.cpp
+++ b/httpd.cpp
@@ -196,6 +196,12 @@ HTTPD::Mux::~Mux()
 
 void HTTPD::Mux::add_packet(const AVPacket &pkt, int64_t pts, int64_t dts)
 {
+       if (!seen_keyframe && !(pkt.stream_index == 0 && (pkt.flags & AV_PKT_FLAG_KEY))) {
+               // Wait until we see the first (video) key frame.
+               return;
+       }
+       seen_keyframe = true;
+
        AVPacket pkt_copy;
        av_copy_packet(&pkt_copy, &pkt);
        if (pkt.stream_index == 0) {
diff --git a/httpd.h b/httpd.h
index e739f70dd173821a6ab34aaf5d8171a283a0582b..88aeecc8263dffc2f4bc961db424324a9744b794 100644 (file)
--- a/httpd.h
+++ b/httpd.h
@@ -61,6 +61,7 @@ private:
                void add_packet(const AVPacket &pkt, int64_t pts, int64_t dts);
 
        private:
+               bool seen_keyframe = false;
                AVFormatContext *avctx;
                AVStream *avstream_video, *avstream_audio;
        };