From: Steinar H. Gunderson Date: Mon, 31 Oct 2016 20:05:20 +0000 (+0100) Subject: Fix an issue with streaming the NUT mux to HTTP. X-Git-Tag: 1.4.1~5 X-Git-Url: https://git.sesse.net/?p=nageru;a=commitdiff_plain;h=e8a66daac69cf6f243e03489aec8b9321d59e169 Fix an issue with streaming the NUT mux to HTTP. --- 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.