X-Git-Url: https://git.sesse.net/?p=cubemap;a=blobdiff_plain;f=config.cpp;fp=config.cpp;h=5a1fdd9ba367e13be0dec4ac4014b56624598ae1;hp=55968eed644763d7185be915eb5833cdf4eab03a;hb=20e85bd6901355cc40a6cfb4c0deb7232d9aa63f;hpb=061988af511f42da3cd584b4d983177504ddc177 diff --git a/config.cpp b/config.cpp index 55968ee..5a1fdd9 100644 --- a/config.cpp +++ b/config.cpp @@ -380,6 +380,54 @@ bool parse_stream(const ConfigLine &line, Config *config) stream.pacing_rate = atoi(pacing_rate_it->second.c_str()) * 1024 / 8; } + // Parse the HLS URL, if any. + const auto hls_url_it = line.parameters.find("hls_playlist"); + if (hls_url_it != line.parameters.end()) { + stream.hls_url = hls_url_it->second; + if (stream.hls_url.empty()) { + log(ERROR, "Parameter 'hls_playlist' was given but empty"); + return false; + } + if (stream.encoding == StreamConfig::STREAM_ENCODING_METACUBE) { + log(ERROR, "HLS cannot be used with Metacube output"); + return false; + } + } + + // Parse the HLS fragment duration, if any. + const auto hls_frag_duration_it = line.parameters.find("hls_frag_duration"); + if (hls_frag_duration_it != line.parameters.end()) { + if (stream.hls_url.empty()) { + log(ERROR, "Parameter 'hls_frag_duration' given, but no 'hls_playlist' given"); + return false; + } + stream.hls_frag_duration = stoi(hls_frag_duration_it->second); + if (stream.hls_frag_duration <= 0) { + log(ERROR, "'hls_frag_duration' must be a strictly positive integer"); + return false; + } + } + + // Parse the HLS backlog margin, if any. + const auto hls_backlog_margin_it = line.parameters.find("hls_backlog_margin"); + if (hls_backlog_margin_it != line.parameters.end()) { + if (stream.hls_url.empty()) { + log(ERROR, "Parameter 'hls_backlog_margin' given, but no 'hls_playlist' given"); + return false; + } + stream.hls_backlog_margin = stoi(hls_backlog_margin_it->second); + if (stream.hls_backlog_margin < 0 || stream.hls_backlog_margin >= stream.backlog_size) { + log(ERROR, "'hls_backlog_margin' must be nonnegative, but less than the backlog size"); + return false; + } + } + + // Parse the CORS origin, if it exists. + const auto allow_origin_it = line.parameters.find("allow_origin"); + if (allow_origin_it != line.parameters.end()) { + stream.allow_origin = allow_origin_it->second; + } + config->streams.push_back(stream); return true; }