Skip to main content
The LiveKit Swift SDK provides simple methods to enable and configure camera and microphone tracks for local participants.

Enable Camera

Use setCamera(enabled:) to publish or unpublish the camera track:
try await room.localParticipant.setCamera(enabled: true)
To disable the camera:
try await room.localParticipant.setCamera(enabled: false)

Camera Capture Options

Configure camera capture settings using CameraCaptureOptions:
let captureOptions = CameraCaptureOptions(
    dimensions: .h1080_169,
    fps: 30
)

try await room.localParticipant.setCamera(
    enabled: true,
    captureOptions: captureOptions
)

Camera Publish Options

Control how the camera track is published using VideoPublishOptions:
let publishOptions = VideoPublishOptions(
    encoding: VideoEncoding(
        maxBitrate: 3_000_000,
        maxFps: 30
    )
)

try await room.localParticipant.setCamera(
    enabled: true,
    publishOptions: publishOptions
)

Enable Microphone

Use setMicrophone(enabled:) to publish or unpublish the microphone track:
try await room.localParticipant.setMicrophone(enabled: true)
To disable the microphone:
try await room.localParticipant.setMicrophone(enabled: false)

Audio Capture Options

Configure audio capture using AudioCaptureOptions:
let captureOptions = AudioCaptureOptions(
    echoCancellation: true,
    noiseSuppression: true
)

try await room.localParticipant.setMicrophone(
    enabled: true,
    captureOptions: captureOptions
)

Audio Publish Options

Control how audio is published using AudioPublishOptions:
let publishOptions = AudioPublishOptions(
    encoding: .presetMusic,  // Or .presetSpeech
    dtx: true,               // Discontinuous transmission
    red: true                // Redundant encoding
)

try await room.localParticipant.setMicrophone(
    enabled: true,
    publishOptions: publishOptions
)

Setting Default Options

Set default capture and publish options when creating a room:
let roomOptions = RoomOptions(
    defaultCameraCaptureOptions: CameraCaptureOptions(
        dimensions: .h720_169,
        fps: 30
    ),
    defaultAudioCaptureOptions: AudioCaptureOptions(),
    defaultVideoPublishOptions: VideoPublishOptions(),
    defaultAudioPublishOptions: AudioPublishOptions()
)

let room = Room(roomOptions: roomOptions)

Mute and Unmute

For camera and microphone tracks, calling setCamera(enabled: false) or setMicrophone(enabled: false) will mute the track without unpublishing it:
// Mute microphone (keeps track published)
try await room.localParticipant.setMicrophone(enabled: false)

// Unmute microphone
try await room.localParticipant.setMicrophone(enabled: true)
You can also use the track publication to mute/unmute:
if let publication = room.localParticipant.getTrackPublication(source: .microphone) as? LocalTrackPublication {
    try await publication.mute()
    try await publication.unmute()
}

Advanced: Manual Track Publishing

For more control, create and publish tracks manually:
// Create camera track
let cameraTrack = LocalVideoTrack.createCameraTrack(
    options: CameraCaptureOptions(dimensions: .h1080_169)
)

// Publish the track
try await room.localParticipant.publish(videoTrack: cameraTrack)

// Create microphone track
let microphoneTrack = LocalAudioTrack.createTrack()

// Publish the track
try await room.localParticipant.publish(audioTrack: microphoneTrack)

Checking Track State

Check if camera or microphone is currently enabled:
// Check if camera is enabled
let isCameraEnabled = room.localParticipant.isCameraEnabled()

// Check if microphone is enabled  
let isMicrophoneEnabled = room.localParticipant.isMicrophoneEnabled()

See Also

  • LocalParticipant.swift:322 (setCamera(enabled:captureOptions:publishOptions:))
  • LocalParticipant.swift:334 (setMicrophone(enabled:captureOptions:publishOptions:))

Build docs developers (and LLMs) love