Повреждение фрагментов аудиобайт при потоковой передаче с помощью Django и Websockets

Я пытаюсь реализовать сервис потоковой транскрипции аудио с использованием django и websockets. Реализация работает, но фрагменты повреждаются через некоторое время, например, после десятого или одиннадцатого фрагмента транскрипции, при отладке я обнаружил, что расширение webm audio bytes отсутствует (что означает, что некоторые другие метаданные также могут отсутствовать в этих фрагментах, из-за чего я не могу транскрибировать эти фрагменты.

).
class TranscriptConsumer(AsyncWebsocketConsumer):
    """
    Server side implementation of the audio streaming service
    """
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.audio_buffer = b''  # Variable to store accumulated audio data

Я использовал переменную audio_buffer для конкатенации всех кусков аудиобайтов, пытаясь предотвратить повреждение данных, поскольку до использования этой переменной для конкатенации кусков я столкнулся с повреждением аудиобайтов после первого куска. Для получения и конкатенации чанков

я использую следующее
async def receive(self, text_data=None, bytes_data=None):
        if bytes_data:
            # Combine incoming bytes_data with the accumulated audio_buffer
            self.audio_buffer += bytes_data

            # Check if the combined data is sufficient for processing
            if len(self.audio_buffer) >= 10000:  
                await self.process_audio()

И ниже расшифровка фрагментов

# Split the combined data into chunks
max_chunk_size = 1024 * 1024  # 1MB chunk size
chunks = [self.audio_buffer[i:i + max_chunk_size] for i in range(0, len(self.audio_buffer), max_chunk_size)]
           

# Process chunks in parallel (using asyncio.gather for concurrency)
tasks = [self.transcribe_chunk(chunk, model) for chunk in chunks]
transcriptions = await asyncio.gather(*tasks)

когда чанк не поврежден, я получаю "Audio format Server Side: ['webm']", но когда он поврежден, я получаю "Audio format Server Side: None"

Вернуться на верх