FMLiveSwitchCocoaAudioUnitSink Class Reference

Audio sink that writes decoded audio to the centralized AudioSessionManager mixer. More...

Instance Methods

(NSString *) - label
 Gets the label/name of this audio sink implementation. More...
 
(bool) - useVoiceProcessingIO
 Legacy property - always returns YES (VPIO always used via AudioSessionManager). More...
 
(void) - setUseVoiceProcessingIO:
 Legacy setter - has no effect (VPIO configuration managed by AudioSessionManager). More...
 
(NSString *) - audioSessionId
 Returns the unique identifier used to register this sink with AudioSessionManager. More...
 
- Instance Methods inherited from FMLiveSwitchAudioSink
(FMLiveSwitchAudioConfig *) - config
 Gets the input configuration. More...
 
(FMLiveSwitchIAudioOutputCollection *) - createOutputCollectionWithInput:
 Creates an output collection. More...
 
(double) - gain
 Gets a value indicating the gain (input amplification) of this sink. More...
 
(instancetype) - init
 Initializes a new instance of the FMLiveSwitchAudioSink class. More...
 
(instancetype) - initWithInputFormat:
 Initializes a new instance of the FMLiveSwitchAudioSink class. More...
 
(bool) - processFrame:
 Processes a frame. More...
 
(void) - setGain:
 Sets a value indicating the gain (input amplification) of this sink. More...
 
- Instance Methods inherited from FMLiveSwitchMediaSink
(void) - addInput:
 Adds an input. More...
 
(void) - addInputs:
 Adds some inputs. More...
 
(void) - addOnDisabledChange:
 Adds a handler that is raised when the Disabled property changes state. More...
 
(void) - addOnPausedChange:
 Adds a handler that is raised when the Paused property changes state. More...
 
(void) - addOnProcessControlFrameResponses:
 Adds a handler that is raised when control frame responses are processed. More...
 
(NSMutableArray *) - addOnProcessControlFrameResponsesWithBlock
 Adds a handler that is raised when control frame responses are processed. More...
 
(void) - addOnProcessControlFrameResponsesWithBlock:
 Adds a handler that is raised when control frame responses are processed. More...
 
(void) - addOnProcessedControlFrameResponses:
 Adds a handler that is raised when control frame responses have been processed. More...
 
(NSMutableArray *) - addOnProcessedControlFrameResponsesWithBlock
 Adds a handler that is raised when control frame responses have been processed. More...
 
(void) - addOnProcessedControlFrameResponsesWithBlock:
 Adds a handler that is raised when control frame responses have been processed. More...
 
(void) - addOnProcessedFrame:
 Adds a handler that is raised when a frame has been processed. More...
 
(TFrame) - addOnProcessedFrameWithBlock
 Adds a handler that is raised when a frame has been processed. More...
 
(void) - addOnProcessedFrameWithBlock:
 Adds a handler that is raised when a frame has been processed. More...
 
(void) - addOnProcessFrame:
 Adds a handler that is raised when a frame is being processed. More...
 
(void) - addOnProcessFrameException:
 Adds a handler that is raised when an exception is thrown while processing a frame. More...
 
(TFrame, NSException *) - addOnProcessFrameExceptionWithBlock
 Adds a handler that is raised when an exception is thrown while processing a frame. More...
 
(void) - addOnProcessFrameExceptionWithBlock:
 Adds a handler that is raised when an exception is thrown while processing a frame. More...
 
(TFrame) - addOnProcessFrameWithBlock
 Adds a handler that is raised when a frame is being processed. More...
 
(void) - addOnProcessFrameWithBlock:
 Adds a handler that is raised when a frame is being processed. More...
 
(void) - addOnProcessFrameWithCaller:
 Adds a handler that is raised when a frame is being processed. More...
 
(id, TFrame) - addOnProcessFrameWithCallerWithBlock
 Adds a handler that is raised when a frame is being processed. More...
 
(void) - addOnProcessFrameWithCallerWithBlock:
 Adds a handler that is raised when a frame is being processed. More...
 
(void) - addOnRaiseControlFrames:
 Adds a handler that is raised when control frames are raised. More...
 
(NSMutableArray *) - addOnRaiseControlFramesWithBlock
 Adds a handler that is raised when control frames are raised. More...
 
(void) - addOnRaiseControlFramesWithBlock:
 Adds a handler that is raised when control frames are raised. More...
 
(void) - addOnRaisedControlFrames:
 Adds a handler that is raised when control frames have been raised. More...
 
(NSMutableArray *) - addOnRaisedControlFramesWithBlock
 Adds a handler that is raised when control frames have been raised. More...
 
(void) - addOnRaisedControlFramesWithBlock:
 Adds a handler that is raised when control frames have been raised. More...
 
(void) - addOnStateChange:
 Adds a handler that is raised when the state changes. More...
 
(TSink) - addOnStateChangeWithBlock
 Adds a handler that is raised when the state changes. More...
 
(void) - addOnStateChangeWithBlock:
 Adds a handler that is raised when the state changes. More...
 
(bool) - allowDiagnosticTimer
 Gets whether this media sink is allowed to be timed. More...
 
(bool) - allowInputRateTimer
 Gets whether this media pipe input rate is allowed to be timed. More...
 
(FMLiveSwitchFuture< id > *) - changeOutput:
 Changes the current output. More...
 
(NSString *) - content
 Gets the content descriptor. More...
 
(TIOutputCollection) - createOutputCollectionWithInput:
 Creates an output collection. More...
 
(bool) - deactivated
 Gets a value indicating whether this sink is deactivated. More...
 
(NSString *) - description
 Returns a string that represents this instance. More...
 
(bool) - destroy
 Destroys this instance. More...
 
(bool) - disabled
 Gets a value indicating whether this sink is disabled. More...
 
(void) - doDestroy
 Destroys this instance. More...
 
(void) - doPostProcessFrame:inputBuffer:
 Post-processes a frame. More...
 
(void) - doPreProcessFrame:inputBuffer:
 Pre-processes a frame. More...
 
(void) - doProcessControlFrameResponses:
 Processes control frame responses. More...
 
(void) - doProcessFrame:inputBuffer:
 Processes a frame. More...
 
(FMLiveSwitchError *) - doProcessSdpMediaDescription:isOffer:isLocalDescription:
 Processes a remote SDP media description. More...
 
(void) - doProcessSinkStatsFromInputWithSinkStats:
 Processes sink stats from an input. More...
 
(void) - doProcessTrackStatsFromInputWithTrackStats:
 Processes track stats from an input. More...
 
(int) - getCcmSequenceNumber
 Gets the CCM sequence number. More...
 
(FMLiveSwitchFuture< NSMutableArray * > *) - getOutputs
 Gets the available outputs. More...
 
(long long) - getPipelineSystemDelayWithOutputFormat:
 Gets the total pipeline system delay in ticks for a given output format. More...
 
(bool) - hasInput:
 Determines whether this pipe has the specified input. More...
 
(void) - incrementCcmSequenceNumber
 Increments the CCM sequence number. More...
 
(instancetype) - initWithInputFormat:
 Initializes a new instance of the FMLiveSwitchMediaSink`8 class. More...
 
(TIOutput) - input
 Gets the input. More...
 
(void) - inputAddedWithInput:
 Called when an input is added. More...
 
(bool) - inputDeactivated
 Gets whether input is deactivated. More...
 
(TFormat) - inputFormat
 Gets the input format. More...
 
(bool) - inputMuted
 Gets whether input is muted. More...
 
(void) - inputRemovedWithInput:
 Called when an input is removed. More...
 
(NSString *) - inputRtpStreamId
 Gets the input RTP stream identifier. More...
 
(NSMutableArray *) - inputs
 Gets the inputs. More...
 
(long long) - inputSynchronizationSource
 Gets the input synchronization source. More...
 
(bool) - isMixer
 Gets whether this sink processes media from different sources. More...
 
(int) - maxInputBitrate
 Gets the maximum allowed input bitrate, in kbps. More...
 
(FMLiveSwitchEncodingInfo *) - maxInputEncoding
 Gets the maximum allowed input encoding. More...
 
(int) - minInputBitrate
 Gets the minimum allowed input bitrate, in kbps. More...
 
(FMLiveSwitchEncodingInfo *) - minInputEncoding
 Gets the minimum allowed input encoding. More...
 
(bool) - muted
 Gets whether input is muted. More...
 
(FMLiveSwitchSinkOutput *) - output
 Gets the current output. More...
 
(bool) - overConstrained
 Gets whether this sink is over-constrained. More...
 
(bool) - overConstrainedBitrate
 Gets whether the sink bitrate is over-constrained. More...
 
(bool) - overConstrainedInput
 Gets whether the input is over-contrained. More...
 
(bool) - overConstrainedInputBitrate
 Gets whether the minimum allowed input bitrate exceeds the maximum allowed input bitrate. More...
 
(bool) - paused
 Gets a value indicating whether this sink is paused. More...
 
(bool) - persistent
 Gets a value indicating whether this instance is persistent. More...
 
(NSString *) - pipelineJson
 Gets the pipeline JSON with this as the central point. More...
 
(NSString *) - pipelineJsonFromInput
 Gets the pipeline JSON from an input. More...
 
(void) - processControlFrameResponse:
 Processes a control frame response. More...
 
(void) - processControlFrameResponses:
 Processes control frame responses. More...
 
(bool) - processFrame:
 Processes a frame. More...
 
(FMLiveSwitchProcessFramePolicy) - processFramePolicy
 Gets the ProcessFramePolicy for this media input. More...
 
(FMLiveSwitchError *) - processSdpMediaDescriptionFromInputWithMediaDescription:isOffer:isLocalDescription:
 Processes a remote SDP media description from an output. More...
 
(void) - processSinkStatsFromInputWithSinkStats:
 Processes sink stats from an input. More...
 
(void) - processTrackStatsFromInputWithTrackStats:
 Processes track stats from an input. More...
 
(void) - raiseControlFrame:
 Raises a control frame. More...
 
(void) - raiseControlFrame:inputs:
 Raises a control frame. More...
 
(void) - raiseControlFrames:
 Raises control frames. More...
 
(void) - raiseControlFrames:inputs:
 Raises control frames. More...
 
(void) - raiseDisabledChange
 Raises the OnDisabledChange event. More...
 
(bool) - removeInput:
 Removes an input. More...
 
(void) - removeInputs
 Removes all inputs. More...
 
(void) - removeInputs:
 Removes some inputs. More...
 
(void) - removeOnDisabledChange:
 Removes a handler that is raised when the Disabled property changes state. More...
 
(void) - removeOnPausedChange:
 Removes a handler that is raised when the Paused property changes state. More...
 
(void) - removeOnProcessControlFrameResponses:
 Removes a handler that is raised when control frame responses are processed. More...
 
(void) - removeOnProcessedControlFrameResponses:
 Removes a handler that is raised when control frame responses have been processed. More...
 
(void) - removeOnProcessedFrame:
 Removes a handler that is raised when a frame has been processed. More...
 
(void) - removeOnProcessFrame:
 Removes a handler that is raised when a frame is being processed. More...
 
(void) - removeOnProcessFrameException:
 Removes a handler that is raised when an exception is thrown while processing a frame. More...
 
(void) - removeOnProcessFrameWithCaller:
 Removes a handler that is raised when a frame is being processed. More...
 
(void) - removeOnRaiseControlFrames:
 Removes a handler that is raised when control frames are raised. More...
 
(void) - removeOnRaisedControlFrames:
 Removes a handler that is raised when control frames have been raised. More...
 
(void) - removeOnStateChange:
 Removes a handler that is raised when the state changes. More...
 
(void) - setDeactivated:
 Sets a value indicating whether this sink is deactivated. More...
 
(void) - setDisabled:
 Sets a value indicating whether this sink is disabled. More...
 
(void) - setInput:
 Sets the input. More...
 
(void) - setInputDeactivated:
 Sets whether input is deactivated. More...
 
(void) - setInputMuted:
 Sets whether input is muted. More...
 
(void) - setInputRtpStreamId:
 Sets the input RTP stream identifier. More...
 
(void) - setInputs:
 Sets the inputs. More...
 
(void) - setInputSynchronizationSource:
 Sets the input synchronization source. More...
 
(void) - setMaxInputBitrate:
 Sets the maximum allowed input bitrate, in kbps. More...
 
(void) - setMaxInputEncoding:
 Sets the maximum allowed input encoding. More...
 
(void) - setMinInputBitrate:
 Sets the minimum allowed input bitrate, in kbps. More...
 
(void) - setMinInputEncoding:
 Sets the minimum allowed input encoding. More...
 
(void) - setMuted:
 Sets whether input is muted. More...
 
(void) - setOutput:
 Sets the current output. More...
 
(void) - setPersistent:
 Sets a value indicating whether this instance is persistent. More...
 
(void) - setProcessFramePolicy:
 Sets the ProcessFramePolicy for this media input. More...
 
(void) - setSystemDelay:
 Sets the system delay in ticks. More...
 
(FMLiveSwitchMediaSinkState) - state
 Gets the state. More...
 
(long long) - systemDelay
 Gets the system delay in ticks. More...
 
(bool) - trySetInputFormatWithFrame:
 Sets the input format, if not set, using the frame's last buffer format. More...
 
(bool) - updateDisabled
 Updates the disabled property. More...
 
- Instance Methods inherited from <FMLiveSwitchIAudioOutput>
(void) - setVolume:
 Sets a value indicating the volume (output resistance) of this source. More...
 
(double) - volume
 Gets a value indicating the volume (output resistance) of this source. More...
 
- Instance Methods inherited from <FMLiveSwitchIMediaOutput>
(void) - addOnDisabledChange:
 Adds a handler that is raised when the Disabled property changes state. More...
 
(void) - addOnDisabledChangeWithCaller:
 Adds a handler that is raised when the Disabled property changes state. More...
 
(id- addOnDisabledChangeWithCallerWithBlock
 Adds a handler that is raised when the Disabled property changes state. More...
 
(void) - addOnDisabledChangeWithCallerWithBlock:
 Adds a handler that is raised when the Disabled property changes state. More...
 
(void) - addOnPausedChange:
 Adds a handler that is raised when the Paused property changes state. More...
 
(void) - addOnProcessControlFrames:
 Adds a handler that is raised when control frames are processed. More...
 
(NSMutableArray *) - addOnProcessControlFramesWithBlock
 Adds a handler that is raised when control frames are processed. More...
 
(void) - addOnProcessControlFramesWithBlock:
 Adds a handler that is raised when control frames are processed. More...
 
(void) - addOnRaiseControlFrameResponses:
 Adds a handler that is raised when a control frame response is raised. More...
 
(NSMutableArray *) - addOnRaiseControlFrameResponsesWithBlock
 Adds a handler that is raised when a control frame response is raised. More...
 
(void) - addOnRaiseControlFrameResponsesWithBlock:
 Adds a handler that is raised when a control frame response is raised. More...
 
(void) - addOnRaiseFrame:
 Adds a handler that is raised when a frame is raised. More...
 
(FMLiveSwitchMediaFrame *) - addOnRaiseFrameWithBlock
 Adds a handler that is raised when a frame is raised. More...
 
(void) - addOnRaiseFrameWithBlock:
 Adds a handler that is raised when a frame is raised. More...
 
(NSString *) - content
 Gets the content descriptor. More...
 
(int) - getCcmSequenceNumber
 Gets the CCM sequence number. More...
 
(long long) - getPipelineSystemDelayWithOutputFormat:
 Gets the total pipeline system delay in ticks for a given media format. More...
 
(void) - incrementCcmSequenceNumber
 Increments the CCM sequence number. More...
 
(int) - maxOutputBitrate
 Gets the maximum allowed output bitrate, in kbps. More...
 
(FMLiveSwitchEncodingInfo *) - maxOutputEncoding
 Gets the maximum allowed output encoding. More...
 
(int) - minOutputBitrate
 Gets the minimum allowed output bitrate, in kbps. More...
 
(FMLiveSwitchEncodingInfo *) - minOutputEncoding
 Gets the minimum allowed output encoding. More...
 
(bool) - outputDeactivated
 Gets whether output is deactivated. More...
 
(bool) - outputMuted
 Gets whether output is muted. More...
 
(NSString *) - outputRtpStreamId
 Gets the output RTP stream identifier. More...
 
(bool) - outputSynchronizable
 Gets whether output is synchronizable. More...
 
(long long) - outputSynchronizationSource
 Gets the output synchronization source. More...
 
(void) - processControlFrames:
 Processes control frames. More...
 
(FMLiveSwitchError *) - processSdpMediaDescriptionFromOutputWithMediaDescription:isOffer:isLocalDescription:
 Processes a local SDP media description from an output. More...
 
(void) - processSourceStatsFromOutputWithSourceStats:
 Processes source stats from an output. More...
 
(void) - processTrackStatsFromOutputWithTrackStats:
 Processes track stats from an output. More...
 
(void) - removeOnDisabledChange:
 Removes a handler that is raised when the Disabled property changes state. More...
 
(void) - removeOnDisabledChangeWithCaller:
 Removes a handler that is raised when the Disabled property changes state. More...
 
(void) - removeOnPausedChange:
 Removes a handler that is raised when the Paused property changes state. More...
 
(void) - removeOnProcessControlFrames:
 Removes a handler that is raised when control frames are processed. More...
 
(void) - removeOnRaiseControlFrameResponses:
 Removes a handler that is raised when a control frame response is raised. More...
 
(void) - removeOnRaiseFrame:
 Removes a handler that is raised when a frame is raised. More...
 
(long long) - systemDelay
 Gets the system delay in ticks. More...
 
(int) - targetOutputBitrate
 Gets the target output bitrate, in kbps. More...
 
(FMLiveSwitchEncodingInfo *) - targetOutputEncoding
 Gets the target output encoding. More...
 
- Instance Methods inherited from <FMLiveSwitchIOutput>
(void) - addOutput:
 Adds an output. More...
 
(void) - addOutputs:
 Adds some outputs. More...
 
(NSObject< FMLiveSwitchIInput > *) - output
 Gets the output. More...
 
(FMLiveSwitchMediaFormat *) - outputFormat
 Gets the output format. More...
 
(NSMutableArray *) - outputs
 Gets the outputs. More...
 
(NSString *) - pipelineJsonFromOutput
 Gets the pipeline JSON from an output. More...
 
(bool) - removeOutput:
 Removes an output. More...
 
(void) - removeOutputs
 Removes all outputs. More...
 
(void) - removeOutputs:
 Removes some outputs. More...
 
- Instance Methods inherited from <FMLiveSwitchIElement>
(NSString *) - externalId
 Gets the external identifier. More...
 
(NSString *) - id
 Gets the identifier. More...
 
(NSString *) - pipelineJson
 Gets the pipeline JSON with this as the central point. More...
 
(void) - setExternalId:
 Sets the external identifier. More...
 
- Instance Methods inherited from <FMLiveSwitchIMediaElement>
(bool) - deactivated
 Gets a value indicating whether this instance is deactivated. More...
 
(bool) - destroy
 Destroys this instance. More...
 
(bool) - disabled
 Gets a value indicating whether this instance is disabled. More...
 
(bool) - muted
 Gets a value indicating whether this instance is muted. More...
 
(bool) - paused
 Gets a value indicating whether this instance is paused. More...
 
(bool) - persistent
 Gets a value indicating whether this instance is persistent. More...
 
(void) - setDeactivated:
 Sets a value indicating whether this instance is deactivated. More...
 
(void) - setMuted:
 Sets a value indicating whether this instance is muted. More...
 

Class Methods

(instancetype) + audioUnitSinkWithConfig:
 Creates an audio sink with the specified audio configuration. More...
 
(instancetype) + audioUnitSinkWithInput:
 Creates an audio sink with a single input. More...
 
(instancetype) + audioUnitSinkWithInputs:
 Creates an audio sink with multiple inputs. More...
 
- Class Methods inherited from FMLiveSwitchAudioSink
(FMLiveSwitchAudioSink *) + audioSink
 Initializes a new instance of the FMLiveSwitchAudioSink class. More...
 
(FMLiveSwitchAudioSink *) + audioSinkWithInputFormat:
 Initializes a new instance of the FMLiveSwitchAudioSink class. More...
 
- Class Methods inherited from FMLiveSwitchMediaSink
(FMLiveSwitchMediaSink *) + mediaSink
 Initializes a new instance of the FMLiveSwitchMediaSink`8 class. More...
 
(FMLiveSwitchMediaSink *) + mediaSinkWithInputFormat:
 Initializes a new instance of the FMLiveSwitchMediaSink`8 class. More...
 

Additional Inherited Members

- Protected Attributes inherited from FMLiveSwitchMediaSink
 __pad0__: FMLiveSwitchMediaSinkBase<FMLiveSwitchIMediaInput
 
 FMLiveSwitchIInput
 
 FMLiveSwitchIMediaElement
 

Detailed Description

Audio sink that writes decoded audio to the centralized AudioSessionManager mixer.

@discussion This sink receives decoded audio frames from IceLink and writes them to the AudioSessionManager's mixing buffer. The AudioSessionManager combines audio from all active sinks and plays the mixed output through its shared VPIO AudioUnit.

Key Architectural Points:

  • Does NOT own an AudioUnit (AudioSessionManager owns the shared VPIO)
  • Does NOT have a render callback (AudioSessionManager handles rendering)
  • Does NOT manage circular buffers (AudioSessionManager handles mixing buffers)
  • Simply writes decoded audio data to AudioSessionManager's mixer

Lifecycle:

  1. Created when a RemoteMedia is instantiated
  2. Registers with AudioSessionManager on initialization (doInitialize)
  3. Writes audio frames to mixer in doProcessFrame
  4. Unregisters from AudioSessionManager on destruction (doDestroy)

Audio Flow:

IceLink → RemoteMedia → AudioUnitSink.doProcessFrame() →
AudioSessionManager.writeSpeakerData() → Mixer Buffer →
VPIO Output Callback → Speaker

Multiple Sinks:

  • Multiple AudioUnitSinks can coexist (one per remote participant)
  • AudioSessionManager mixes all sink outputs together
  • Each sink has its own circular buffer in the mixer
  • Mixing uses simple addition with clipping to prevent distortion

Thread Safety:

  • doInitialize/doDestroy called on main thread
  • doProcessFrame called on media decode thread
  • AudioSessionManager handles thread-safe mixing

Comparison to Traditional Approach:

OLD (Per-Sink AudioUnit):

  • Each sink creates its own AudioUnit
  • Only one sink can actually play (speaker conflict)
  • Volume issues, no echo cancellation

NEW (Centralized Mixer):

  • All sinks write to shared mixer
  • AudioSessionManager plays mixed output
  • Full volume, proper echo cancellation

Usage:

// Created automatically by RemoteMedia
FMLiveSwitchAudioConfig *config = [FMLiveSwitchAudioConfig audioConfigWithClockRate:48000];
FMLiveSwitchCocoaAudioUnitSink *sink = [FMLiveSwitchCocoaAudioUnitSink audioUnitSinkWithConfig:config];
[remoteMedia setAudioSink:sink];

Method Documentation

◆ audioSessionId

- (NSString *) audioSessionId

Returns the unique identifier used to register this sink with AudioSessionManager.

Returns
The GUID string that was passed to AudioSessionManager at sink registration time. This is the same value stored in the telemetry snapshot under sinkMediaId.

@discussion Used by the telemetry layer to correlate this sink with its remote RTP SSRC (see FMLiveSwitchCocoaServerConnectionTelemetry).

◆ audioUnitSinkWithConfig:

+ (instancetype) audioUnitSinkWithConfig: (FMLiveSwitchAudioConfig *)  config

Creates an audio sink with the specified audio configuration.

Parameters
configThe audio configuration (sample rate, channel count, etc.).
Returns
A new AudioUnitSink instance.

@discussion This creates a sink configured for the given audio format. The sink will register with AudioSessionManager when initialized.

Typical configurations:

  • VoIP: 48kHz, 1 channel (mono), 16-bit PCM
  • High-quality: 48kHz, 2 channels (stereo), 16-bit PCM

The configuration should match the audio being received from IceLink.

Example:

FMLiveSwitchAudioConfig *config = [FMLiveSwitchAudioConfig audioConfigWithClockRate:48000];
config.channelCount = 1;
FMLiveSwitchCocoaAudioUnitSink *sink = [FMLiveSwitchCocoaAudioUnitSink audioUnitSinkWithConfig:config];

◆ audioUnitSinkWithInput:

+ (instancetype) audioUnitSinkWithInput: (NSObject<FMLiveSwitchIAudioOutput> *)  input

Creates an audio sink with a single input.

Parameters
inputThe audio output to connect as input (typically from decoder).
Returns
A new AudioUnitSink instance with the input already connected.

@discussion This convenience method creates a sink and connects an input in one step. The configuration is derived from the input's audio format.

Example:

// audioOutput is typically an audio decoder
FMLiveSwitchCocoaAudioUnitSink *sink = [FMLiveSwitchCocoaAudioUnitSink audioUnitSinkWithInput:audioOutput];

◆ audioUnitSinkWithInputs:

+ (instancetype) audioUnitSinkWithInputs: (NSMutableArray *)  inputs

Creates an audio sink with multiple inputs.

Parameters
inputsArray of audio outputs to connect as inputs.
Returns
A new AudioUnitSink instance with all inputs connected.

@discussion This creates a sink with multiple audio inputs that will be mixed together. All inputs must have the same audio format (sample rate, channels, etc.).

Example:

NSMutableArray *inputs = [NSMutableArray arrayWithObjects:decoder1, decoder2, nil];
FMLiveSwitchCocoaAudioUnitSink *sink = [FMLiveSwitchCocoaAudioUnitSink audioUnitSinkWithInputs:inputs];

◆ label

- (NSString *) label

Gets the label/name of this audio sink implementation.

Returns
A string identifying this sink (e.g., "iOS AudioUnit Sink (Centralized VPIO)").

@discussion The label varies by platform:

  • iOS: "iOS AudioUnit Sink (Centralized VPIO)"
  • tvOS: "tvOS AudioUnit Sink (Centralized VPIO)"
  • macOS: "macOS AudioUnit Sink (Centralized VPIO)"

This is primarily used for logging and debugging.

Implements FMLiveSwitchMediaSink.

◆ setUseVoiceProcessingIO:

- (void) setUseVoiceProcessingIO: (bool)  useVoiceProcessingIO

Legacy setter - has no effect (VPIO configuration managed by AudioSessionManager).

Parameters
useVoiceProcessingIOIgnored parameter.

@discussion This setter is maintained for API compatibility but has no effect. To configure VPIO vs RemoteIO, use:

[[FMLiveSwitchCocoaAudioSessionManager sharedInstance] setUseVoiceProcessingIO:YES];
Deprecated:
Use AudioSessionManager configuration instead.

◆ useVoiceProcessingIO

- (bool) useVoiceProcessingIO

Legacy property - always returns YES (VPIO always used via AudioSessionManager).

Returns
YES

@discussion This property is maintained for API compatibility but has no effect. The sink always uses the shared VPIO from AudioSessionManager. To configure VPIO vs RemoteIO, use AudioSessionManager.useVoiceProcessingIO instead.

Deprecated:
Use AudioSessionManager configuration instead.