From e8a66daac69cf6f243e03489aec8b9321d59e169 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 31 Oct 2016 21:05:20 +0100 Subject: [PATCH] Fix an issue with streaming the NUT mux to HTTP. --- video_encoder.cpp | 8 ++++++++ video_encoder.h | 2 ++ 2 files changed, 10 insertions(+) diff --git a/video_encoder.cpp b/video_encoder.cpp index c817283..f736987 100644 --- a/video_encoder.cpp +++ b/video_encoder.cpp @@ -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); diff --git a/video_encoder.h b/video_encoder.h index 0991f91..acb8340 100644 --- a/video_encoder.h +++ b/video_encoder.h @@ -63,6 +63,8 @@ private: HTTPD *httpd; DiskSpaceEstimator *disk_space_estimator; + bool seen_sync_markers = false; + std::unique_ptr stream_mux; // To HTTP. std::unique_ptr stream_audio_encoder; std::unique_ptr x264_encoder; // nullptr if not using x264. -- 2.39.2