#[non_exhaustive]pub struct Config {
pub input: Input,
pub codec: Codec,
pub sample_rate: Option<u32>,
pub channels: Option<u32>,
pub bitrate: Option<u32>,
pub fec: bool,
pub dtx: bool,
pub frame_duration: Duration,
}Expand description
Encoder configuration: the input PCM layout plus the codec knobs.
The bring-your-own-PCM counterpart to Options, which
publish_capture uses when the layout comes from the capture source instead
of the caller.
#[non_exhaustive]: build via Config::new and set the optional fields,
so future knobs don’t break callers.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.input: InputThe PCM layout fed to the encoder.
codec: CodecOutput codec. Defaults to Codec::Opus.
sample_rate: Option<u32>Sample rate the codec runs at. None snaps Input::sample_rate up to
the nearest rate the codec supports, resampling if that moved it.
channels: Option<u32>Channel count the codec runs at. None matches Input::channels;
anything else is rejected, since remapping isn’t implemented.
bitrate: Option<u32>Bitrate in bits per second. None lets Opus pick. PCM requires None
because its bitrate is fixed by the sample rate and channel count.
Rates too low for Opus to code anything at the chosen
frame_duration are rejected: below its floor
libopus emits empty frames whatever the input, which carry no audio and
are indistinguishable from silence. The floor is 1200 bps at the default
20 ms, rises for shorter frames (9600 bps at 2.5 ms), and is 2400 bps for
frames of 10 ms and longer.
fec: boolEnable Opus in-band forward error correction.
dtx: boolEnable Opus discontinuous transmission during silence.
frame_duration: DurationEncoded frame duration. Opus accepts 2.5 / 5 / 10 / 20 / 40 / 60 ms. PCM accepts any duration containing a whole number of samples.