@PesyCorm

Как преобразовать поток RTP байт в wav файл?

Я прочитываю RTP поток из сокета в файл, после чего пытаюсь преобразовать его в wav.
Однако, в полученном wav появляются сильные шумы.
При этом голос не искажен, но из-за шумов практически не слышно.
Если слушать тот же самый RTP поток захваченный Wireshark, то никаких шумов нет.
Python код которым прослушиваю rtp сокет

def listen_rtp(self):
        timer = time.time()
        data = []
        while True:
            # Если в течение 200мс не смогли прочитать новые данные, считаем что прослушивание аудиофрагмента завершено
            if data and timer <= (time.time() - 0.2):
                return b''.join(data)

            try:
                data.append(self.socket.recv(1024))
                timer = time.time()
            except TimeoutError:
                pass


Основная идея такого подхода в том, что я могу прослушав один аудио фрагмент, записать его в один файл (с помощью таймаута определяю конец воспроизведения ИВР). Далее будет воспроизведен следующий, его уже в следующий файл и тд.

Записанные в файл байты, преобразовываю в wav с помощью ffmpeg

ffmpeg -f mulaw -ar 8000 -i output.g711u output_g711u.wav



Мне кажется, что эти шумы следствие того, что в файл попадает не только часть payload, но и остальные заголовки rtp.. Но пока что у меня нет идей как это сделать нормально.
  • Вопрос задан
  • 210 просмотров
Решения вопроса 1
IvanU7n
@IvanU7n
нужно немного парсить RTP, т.к. там действительно есть служебные данные: https://datatracker.ietf.org/doc/html/rfc3550, для питона гугл нашёл такое https://github.com/bbc/rd-apmm-python-lib-rtp
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы