fix: ignore corrupted opus packets
This commit is contained in:
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user