PipecatClients communicate with their bot services. Transports implement the underlying device management, connectivity, media transmission, and state logic that manage the lifecycle of your session.
All transport packages (such as DailyTransport) extend from the Transport base class defined in the client-js library. You can extend this class if you are looking to implement your own or add additional functionality.
Transport lifecycle
Each Pipecat client instance is associated with a transport instance. The instance will re-use the transport instance across multiple calls toconnect(), allowing you to connect to different bot services without needing to create a new transport or client each time.
Transport states
TransportState
Your transport instance goes through a series of states during its lifecycle. These states are:
Initializing
Transport is being initialized. This occurs in response to a
pcClient.initDevices() call, where the transport is being set up in order
to enumerate local media devices. If you call connect() and bypass
initDevices(), the transport will skip this state and go directly to
Connecting.Initialized
Transport has been initialized and is ready to connect. This state is
reached after a successful
pcClient.initDevices() call and skipped if
initDevices() is not used.Authenticating
Your client has called
pcClient.startBot() or
pcClient.startBotAndConnect() and is waiting for a response from your
server containing connection details for your transport (such as a session
URL and token). Note: If you provide the TransportConnectionParams
directly to connect() without calling either startBot methods, the
transport will skip this state and go directly to Connecting.Authenticated
Your client has called
pcClient.startBot() or
pcClient.startBotAndConnect() and has successfully received a response. If
using startBotAndConnect(), it will quickly move into the Connecting
state. Note: If you provide the TransportConnectionParams directly to
connect() without calling either startBot methods, the transport will
skip this state and go directly to Connecting.Connected
The transport has successfully connected to the session and is awaiting a
client-ready signal (indicated audio and video tracks are ready to be sent
and received).
pcClient.state, or by defining a callback or event: