diff --git a/CHANGELOG.md b/CHANGELOG.md index 8443b2348..7a2d000b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to **Pipecat** will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Not released yet + +### Removed + +- `LivekitFrameSerializer` has been removed. Use `LiveKitTransport` instead. + ## [0.0.93] - 2025-11-07 ### Added diff --git a/src/pipecat/serializers/livekit.py b/src/pipecat/serializers/livekit.py deleted file mode 100644 index f3a34c434..000000000 --- a/src/pipecat/serializers/livekit.py +++ /dev/null @@ -1,98 +0,0 @@ -# -# Copyright (c) 2024–2025, Daily -# -# SPDX-License-Identifier: BSD 2-Clause License -# - -"""LiveKit frame serializer for Pipecat.""" - -import ctypes -import pickle - -from loguru import logger - -from pipecat.frames.frames import Frame, InputAudioRawFrame, OutputAudioRawFrame -from pipecat.serializers.base_serializer import FrameSerializer, FrameSerializerType - -try: - from livekit.rtc import AudioFrame -except ModuleNotFoundError as e: - logger.error(f"Exception: {e}") - logger.error("In order to use LiveKit, you need to `pip install pipecat-ai[livekit]`.") - raise Exception(f"Missing module: {e}") - - -class LivekitFrameSerializer(FrameSerializer): - """Serializer for converting between Pipecat frames and LiveKit audio frames. - - .. deprecated:: 0.0.90 - - This class is deprecated and will be removed in a future version. - Please use LiveKitTransport instead, which handles audio streaming - and frame conversion natively. - - This serializer handles the conversion of Pipecat's OutputAudioRawFrame objects - to LiveKit AudioFrame objects for transmission, and the reverse conversion - for received audio data. - """ - - def __init__(self): - """Initialize the LiveKit frame serializer.""" - super().__init__() - import warnings - - with warnings.catch_warnings(): - warnings.simplefilter("always") - warnings.warn( - "LivekitFrameSerializer is deprecated and will be removed in a future version. " - "Please use LiveKitTransport instead, which handles audio streaming natively.", - DeprecationWarning, - stacklevel=2, - ) - - @property - def type(self) -> FrameSerializerType: - """Get the serializer type. - - Returns: - The serializer type indicating binary serialization. - """ - return FrameSerializerType.BINARY - - async def serialize(self, frame: Frame) -> str | bytes | None: - """Serialize a Pipecat frame to LiveKit AudioFrame format. - - Args: - frame: The Pipecat frame to serialize. Only OutputAudioRawFrame - instances are supported. - - Returns: - Pickled LiveKit AudioFrame bytes if frame is OutputAudioRawFrame, - None otherwise. - """ - if not isinstance(frame, OutputAudioRawFrame): - return None - audio_frame = AudioFrame( - data=frame.audio, - sample_rate=frame.sample_rate, - num_channels=frame.num_channels, - samples_per_channel=len(frame.audio) // ctypes.sizeof(ctypes.c_int16), - ) - return pickle.dumps(audio_frame) - - async def deserialize(self, data: str | bytes) -> Frame | None: - """Deserialize LiveKit AudioFrame data to a Pipecat frame. - - Args: - data: Pickled data containing a LiveKit AudioFrame. - - Returns: - InputAudioRawFrame containing the deserialized audio data, - or None if deserialization fails. - """ - audio_frame: AudioFrame = pickle.loads(data)["frame"] - return InputAudioRawFrame( - audio=bytes(audio_frame.data), - sample_rate=audio_frame.sample_rate, - num_channels=audio_frame.num_channels, - )