85 lines
1.8 KiB
C++
85 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <expected>
|
|
#include <optional>
|
|
#include <string>
|
|
#include <string_view>
|
|
#include <vector>
|
|
|
|
namespace cvmmap_streamer {
|
|
|
|
enum class CodecType {
|
|
H264,
|
|
H265,
|
|
};
|
|
|
|
enum class RunMode {
|
|
Pipeline,
|
|
Ingest,
|
|
};
|
|
|
|
enum class RtmpMode {
|
|
Enhanced,
|
|
Domestic,
|
|
};
|
|
|
|
struct InputConfig {
|
|
std::string shm_name{"cvmmap_default"};
|
|
std::string zmq_endpoint{"ipc:///tmp/cvmmap_default"};
|
|
};
|
|
|
|
struct RtmpOutputConfig {
|
|
bool enabled{false};
|
|
std::vector<std::string> urls{};
|
|
RtmpMode mode{RtmpMode::Enhanced};
|
|
};
|
|
|
|
struct RtpOutputConfig {
|
|
bool enabled{false};
|
|
std::optional<std::string> endpoint{std::nullopt};
|
|
std::optional<std::string> host{std::nullopt};
|
|
std::optional<std::uint16_t> port{std::nullopt};
|
|
std::uint8_t payload_type{96};
|
|
std::optional<std::string> sdp_path{std::nullopt};
|
|
};
|
|
|
|
struct OutputsConfig {
|
|
RtmpOutputConfig rtmp{};
|
|
RtpOutputConfig rtp{};
|
|
};
|
|
|
|
struct LatencyConfig {
|
|
std::size_t queue_size{1};
|
|
std::uint32_t gop{30};
|
|
std::uint32_t b_frames{0};
|
|
bool realtime_sync{true};
|
|
bool force_idr_on_reset{true};
|
|
std::uint32_t ingest_max_frames{0};
|
|
std::uint32_t ingest_idle_timeout_ms{1000};
|
|
std::uint32_t ingest_consumer_delay_ms{0};
|
|
std::uint32_t snapshot_copy_delay_us{0};
|
|
std::uint32_t emit_stall_ms{0};
|
|
};
|
|
|
|
struct RuntimeConfig {
|
|
InputConfig input{};
|
|
RunMode run_mode{RunMode::Pipeline};
|
|
CodecType codec{CodecType::H264};
|
|
OutputsConfig outputs{};
|
|
LatencyConfig latency{};
|
|
|
|
static RuntimeConfig defaults();
|
|
};
|
|
|
|
std::string_view to_string(CodecType codec);
|
|
std::string_view to_string(RunMode mode);
|
|
std::string_view to_string(RtmpMode mode);
|
|
|
|
std::expected<RuntimeConfig, std::string> parse_runtime_config(int argc, char **argv);
|
|
std::expected<void, std::string> validate_runtime_config(const RuntimeConfig &config);
|
|
std::string summarize_runtime_config(const RuntimeConfig &config);
|
|
|
|
}
|