serializers(twilio): formatting and allow str | bytes | None

This commit is contained in:
Aleix Conchillo Flaqué
2024-06-21 08:25:35 -07:00
parent 25ef0cb87b
commit b62227b4ae
2 changed files with 67 additions and 24 deletions

View File

@@ -1,3 +1,9 @@
#
# Copyright (c) 2024, Daily
#
# SPDX-License-Identifier: BSD 2-Clause License
#
import base64
import json
@@ -12,29 +18,36 @@ class TwilioFrameSerializer(FrameSerializer):
}
def __init__(self):
self.sid = None
self._sid = None
def serialize(self, frame: Frame) -> str | bytes | None:
if not isinstance(frame, AudioRawFrame):
return None
def serialize(self, frame: AudioRawFrame) -> dict:
data = frame.audio
serialized_data = pcm_16000_to_ulaw_8000(data)
payload = base64.b64encode(serialized_data).decode('utf-8')
answer_dict = {"event": "media",
"streamSid": self.sid,
"media": {"payload": payload}}
payload = base64.b64encode(serialized_data).decode("utf-8")
answer = {
"event": "media",
"streamSid": self._sid,
"media": {
"payload": payload
}
}
return answer_dict
return json.dumps(answer)
def deserialize(self, message: bytes) -> AudioRawFrame | None:
data = json.loads(message)
if not self.sid:
self.sid = data['streamSid'] if data.get("streamSid") else None
def deserialize(self, data: str | bytes) -> Frame | None:
message = json.loads(data)
if data['event'] != 'media':
if not self._sid:
self._sid = message["streamSid"] if "streamSid" in message else None
if message["event"] != "media":
return None
else:
payload_base64 = data['media']['payload']
payload_base64 = message["media"]["payload"]
payload = base64.b64decode(payload_base64)
deserialized_data = ulaw_8000_to_pcm_16000(payload)