]> git.sesse.net Git - nageru/commitdiff
Fix an issue with streaming the NUT mux to HTTP.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 31 Oct 2016 20:05:20 +0000 (21:05 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Mon, 31 Oct 2016 20:05:20 +0000 (21:05 +0100)
video_encoder.cpp
video_encoder.h

index c817283690503b8bea94131b1328d13b48c3265d..f7369877b7b55f67a4af3e795a5ed99bb5d88e21 100644 (file)
@@ -170,6 +170,14 @@ int VideoEncoder::write_packet2_thunk(void *opaque, uint8_t *buf, int buf_size,
 
 int VideoEncoder::write_packet2(uint8_t *buf, int buf_size, AVIODataMarkerType type, int64_t time)
 {
+       if (type == AVIO_DATA_MARKER_SYNC_POINT || type == AVIO_DATA_MARKER_BOUNDARY_POINT) {
+               seen_sync_markers = true;
+       } else if (type == AVIO_DATA_MARKER_UNKNOWN && !seen_sync_markers) {
+               // We don't know if this is a keyframe or not (the muxer could
+               // avoid marking it), so we just have to make the best of it.
+               type = AVIO_DATA_MARKER_SYNC_POINT;
+       }
+
        if (type == AVIO_DATA_MARKER_HEADER) {
                stream_mux_header.append((char *)buf, buf_size);
                httpd->set_header(stream_mux_header);
index 0991f91195330a4f32409c9ed047f22455cb922e..acb8340fdee333c16b86f9b7e690e7c311afecea 100644 (file)
@@ -63,6 +63,8 @@ private:
        HTTPD *httpd;
        DiskSpaceEstimator *disk_space_estimator;
 
+       bool seen_sync_markers = false;
+
        std::unique_ptr<Mux> stream_mux;  // To HTTP.
        std::unique_ptr<AudioEncoder> stream_audio_encoder;
        std::unique_ptr<X264Encoder> x264_encoder;  // nullptr if not using x264.