合入音频支持http和https兼容,后端支持角色切换
This commit is contained in:
@@ -4,7 +4,9 @@ import asyncio
|
||||
from fastapi import WebSocket
|
||||
from handlers.audio_packet_parser import parse_packet
|
||||
from handlers.audio_session_handler import handle_websocket_data
|
||||
from handlers.audio_file_handler import message_audio_storage_service, save_audio_file, upload_message_audio
|
||||
from handlers.audio_file_handler import upload_message_audio
|
||||
from banban.service.device_audio_cache import device_audio_cache_service
|
||||
from banban.service.device_voice_archive import device_voice_archive_service
|
||||
from services.audio_session import audio_session_manager
|
||||
from services.interrupt_handler import interrupt_handler
|
||||
from services.task_manager import task_manager
|
||||
@@ -329,35 +331,32 @@ async def process_parent_leave_message(device_id: str, audio_cache_key: str):
|
||||
async def process_cached_audio(device_id: str, target_device_id: str, serial_number: str):
|
||||
"""处理缓存的音频数据并发送音频URL"""
|
||||
try:
|
||||
# 获取缓存的音频数据
|
||||
cached_audio = await target_audio_cache.get_audio_data(target_device_id)
|
||||
if not cached_audio:
|
||||
session_logger.info(device_id, "target", f"目标设备 {target_device_id} 没有缓存的音频数据")
|
||||
return
|
||||
|
||||
# 保存音频文件
|
||||
audio_file_key = await save_audio_file(cached_audio, device_id)
|
||||
audio_url = f"http://{settings.server_host}:{settings.server_port}/{audio_file_key}"
|
||||
# 将音频URL保存到数据库 im_conversation和im_message
|
||||
# await im_conversation_service.create_device_message(device_id=device_id, serial_number=serial_number, target_device_id=target_device_id, audio_url=audio_file_key)
|
||||
# try:
|
||||
# audio_url = await message_audio_storage_service.get_audio_url(audio_file_key)
|
||||
# except Exception:
|
||||
# audio_url = audio_file_key
|
||||
# 发送URL给目标设备
|
||||
# target_websocket = await connection_manager.get_connection(target_device_id)
|
||||
# if target_websocket and target_websocket.client_state.name == "CONNECTED":
|
||||
# await target_websocket.send_text("TTS_START")
|
||||
# session_logger.info(device_id, "target", "已发送 TTS_START 给客户端")
|
||||
# await target_websocket.send_text(f"NFC_SOUND_URL:{audio_url}")
|
||||
# session_logger.info(device_id, "target", f"已发送音频URL给目标设备 {target_device_id}: {audio_url}")
|
||||
# await target_websocket.send_text("TTS_END")
|
||||
# session_logger.info(device_id, "target", "已发送 TTS_END 给客户端")
|
||||
# else:
|
||||
|
||||
# # 目标设备不在线,保存到离线缓存
|
||||
|
||||
audio_url, local_audio_path = await device_audio_cache_service.save_device_audio(
|
||||
cached_audio,
|
||||
device_id=target_device_id,
|
||||
)
|
||||
await offline_audio_cache.add_audio_url(target_device_id, audio_url)
|
||||
session_logger.warning(device_id, "target", f"目标设备 {target_device_id} 不在线,保存音频URL到离线缓存")
|
||||
session_logger.info(
|
||||
device_id,
|
||||
"target",
|
||||
f"设备留言已加入待收听队列: target_device_id={target_device_id}, audio_url={audio_url}",
|
||||
)
|
||||
|
||||
await task_manager.create_task(
|
||||
device_voice_archive_service.archive_peer_voice_message(
|
||||
sender_device_id=device_id,
|
||||
receiver_device_id=target_device_id,
|
||||
local_audio_path=str(local_audio_path),
|
||||
),
|
||||
device_id=device_id,
|
||||
task_type="device_voice_archive",
|
||||
)
|
||||
|
||||
websocket = await connection_manager.get_connection(device_id)
|
||||
if websocket and websocket.client_state.name == "CONNECTED":
|
||||
success_audio_url = f"http://{settings.server_host}:{settings.server_port}/assets/audio/message_ok.mp3"
|
||||
@@ -365,18 +364,7 @@ async def process_cached_audio(device_id: str, target_device_id: str, serial_num
|
||||
session_logger.info(device_id, "device", f"留言已收到音频URL给设备 {device_id}")
|
||||
else:
|
||||
session_logger.warning(device_id, "device", f"设备 {device_id} 不在线,暂不发送留言已收到音频URL")
|
||||
# # # 目标设备不在线,保存到离线缓存
|
||||
# await offline_audio_cache.add_audio_url(target_device_id, audio_url)
|
||||
# session_logger.warning(device_id, "target", f"目标设备 {target_device_id} 不在线,保存音频URL到离线缓存")
|
||||
# websocket = await connection_manager.get_connection(device_id)
|
||||
# if websocket and websocket.client_state.name == "CONNECTED":
|
||||
# success_audio_url = f"http://{settings.server_host}:{settings.server_port}/assets/audio/success_zh.mp3"
|
||||
# await websocket.send_text(f"NFC_MESSAGE_SUCCESS_URL:{success_audio_url}")
|
||||
# session_logger.info(device_id, "device", f"已发送留言成功音频URL给设备 {device_id}")
|
||||
# else:
|
||||
# session_logger.warning(device_id, "device", f"设备 {device_id} 不在线,发送留言成功音频失败")
|
||||
except Exception as e:
|
||||
# 处理HTTPException异常
|
||||
if isinstance(e, HTTPException):
|
||||
session_logger.error(device_id, "target", f"保存音频文件时出错,返回HTTPException: {e}")
|
||||
websocket = await connection_manager.get_connection(device_id)
|
||||
|
||||
Reference in New Issue
Block a user