Skip to main content

Overview

TransportParams is the base configuration class for all Pipecat transports. It controls audio input/output settings and video settings. Every transport’s params class (DailyParams, LiveKitParams, SingleClientWebsocketServerParams, etc.) inherits from TransportParams. You typically pass these via the transport’s params argument:

Audio Output

bool
default:"False"
Enable audio output streaming.
int
default:"None"
Output audio sample rate in Hz. When None, uses PipelineParams.audio_out_sample_rate (24000 by default).
int
default:"1"
Number of output audio channels.
int
default:"96000"
Output audio bitrate in bits per second. Only DailyTransport uses it.
int
default:"4"
Number of 10ms chunks to buffer before sending output audio. Higher values increase latency but reduce overhead.
BaseAudioFilter
default:"None"
Audio filter to apply to output audio of the default destination, before the mixer. Audio the transport generates itself (mixer audio, end silence, DTMF tones) is not filtered.
float
default:"1.0"
Volume of the output audio, as a multiplier on its samples, applied after the filter and before the mixer. A VolumeFrame changes it while the transport runs, and a VolumeGainFrame adjusts it for some audio.
BaseAudioMixer | Mapping[str | None, BaseAudioMixer]
default:"None"
Audio mixer instance for combining audio streams, or a mapping of destination names to mixer instances. In a mapping, the None key sets the mixer for the default destination.
List[str]
default:"[]"
List of audio output destination identifiers for routing audio to specific participants or endpoints.
int
default:"2"
Seconds of silence to send after an EndFrame. Set to 0 to disable.
bool
default:"True"
Insert silence frames when the audio output queue is empty. When False, the transport waits for audio data instead of inserting silence, which is useful for scenarios that require uninterrupted audio playback without artificial gaps. Only DailyTransport and SmallWebRTCTransport use it.
float
default:"10.0"
Maximum time in seconds a single write to the transport may take before the peer is considered gone. A client that stops reading leaves the write waiting with nothing to fail, so exceeding this timeout marks the transport as unusable.

Audio Input

bool
default:"False"
Enable audio input streaming.
int
default:"None"
Input audio sample rate in Hz. When None, uses PipelineParams.audio_in_sample_rate (16000 by default).
int
default:"1"
Number of input audio channels.
BaseAudioFilter
default:"None"
Audio filter to apply to incoming audio (e.g., noise suppression).
bool
default:"True"
Start audio input streaming immediately when the transport starts. When False, audio input begins when an InputTransportStartAudioStreamingFrame reaches the input transport; the RTVI processor pushes one when the client is ready. Only DailyTransport uses it.
bool
default:"True"
Pass input audio frames downstream through the pipeline. When False, input audio is not pushed downstream, so processors after the input transport, such as STT, receive none.

Video Output

bool
default:"False"
Enable video output streaming.
bool
default:"False"
Enable real-time video output. When True, each OutputImageRawFrame is queued and sent at video_out_framerate. When False, the latest image is redrawn repeatedly at video_out_framerate.
int
default:"1024"
Video output width in pixels.
int
default:"768"
Video output height in pixels.
int | None
default:"None"
deprecated
Deprecated since 1.1.0, removed in 2.0.0. Use provider-specific settings instead (e.g., DailyParams.camera_out_send_settings for Daily).
int
default:"30"
Video output frame rate in frames per second.
str
default:"RGB"
Video output color format string.
str
default:"None"
Preferred video codec for output (e.g., VP8, H264, H265).
List[str]
default:"[]"
List of video output destination identifiers.

Video Input

bool
default:"False"
Enable video input streaming.
dict[str, VideoInSourceParams]
default:"{}"
Video sources to capture from each user as they connect, keyed by source ("camera", "screenVideo", or a transport-specific custom source). DailyTransport captures them from each participant as they join, SmallWebRTCTransport when the peer connects, and LiveKitTransport when the participant’s track is subscribed. Sources not listed are captured only when the application asks, for example with the transport’s capture_participant_video(). Requires video_in_enabled=True. Other transports log a warning and ignore it.

VideoInSourceParams

Controls how a transport captures one video source from the user.
int
default:"30"
Frames per second to pass on from this source. Must be at least 1. Cannot be set together with on_request_only=True.
bool
default:"False"
Pass on frames only to answer a UserImageRequestFrame, rather than continuously at framerate.

Capturing video on demand

BaseTransport.capture_participant_video(participant_id, framerate=30, video_source="camera", *, on_request_only=False) captures a user’s video source on demand and takes precedence over video_in_sources for that source. It is implemented by DailyTransport, SmallWebRTCTransport and LiveKitTransport. Other transports, including TavusTransport and LemonSliceTransport, log a warning. A framerate of None passes on every frame, and on_request_only=True passes on only the frames that answer image requests. Passing framerate=0 is deprecated since 1.13.0; use on_request_only=True. BaseTransport.get_client_id(client) returns the participant_id for the client passed to on_client_connected: the participant id on Daily, the participant identity on LiveKit, the peer connection id on SmallWebRTC and the stream id on Vonage. Other transports log a warning and return an empty string.
On SmallWebRTCTransport, calling capture_participant_video() without a participant_id is deprecated since 1.13.0.

Transport Subclasses

Each transport extends TransportParams with provider-specific fields: