fix: ignore corrupted opus packets

This commit is contained in:
2026-06-08 06:20:43 +00:00
parent 1cfd76ae44
commit e6aac63aca
+26
View File
@@ -1,6 +1,7 @@
from __future__ import annotations from __future__ import annotations
import asyncio import asyncio
import logging
import os import os
import shutil import shutil
import uuid import uuid
@@ -9,6 +10,8 @@ from pathlib import Path
import discord import discord
from discord import app_commands from discord import app_commands
from discord.ext import commands, voice_recv from discord.ext import commands, voice_recv
from discord.ext.voice_recv import opus as voice_recv_opus
from discord.opus import OpusError
from dotenv import load_dotenv from dotenv import load_dotenv
import config import config
@@ -16,6 +19,29 @@ from helpers import chunk_message, command_channel_error
from openrouter_client import summarize, transcribe from openrouter_client import summarize, transcribe
from voice import MeetingRecorder from voice import MeetingRecorder
log = logging.getLogger(__name__)
_original_decode_packet = voice_recv_opus.PacketDecoder._decode_packet
def _safe_decode_packet(self, packet):
try:
return _original_decode_packet(self, packet)
except OpusError as exc:
log.warning("Dropping corrupted opus packet for ssrc %s: %s", self.ssrc, exc)
if packet:
return packet, b""
try:
next_packet = self._buffer.peek_next()
if next_packet is not None:
return packet, self._decoder.decode(next_packet.decrypted_data, fec=True)
return packet, self._decoder.decode(None, fec=False)
except Exception:
return packet, b""
voice_recv_opus.PacketDecoder._decode_packet = _safe_decode_packet
load_dotenv() load_dotenv()
TOKEN = os.getenv("DISCORD_BOT_TOKEN") TOKEN = os.getenv("DISCORD_BOT_TOKEN")