首页 > 解决方案 > 将 RTP 有效负载(有效负载类型 107,AMR-WB 16khz 1Channel)转换为 .wav

问题描述

我在 Linux Ubuntu 下使用 Python 3.6,我使用 Scapy lib 从包含以下堆栈的 bin 文件中提取数据:IP/UDP/RTP。RTP-PAYLOAD TYPE 为 107(动态),a=rtpmap:107 AMR-WB/16000/1。

我将它以原始格式放入一个文件中,并将其命名为src.aud,但将其写入十六进制也不会有问题。现在我必须做些什么才能将其转换为音频数据格式,例如每台计算机上的 .wav 或 .mp3 格式?

我已经为这个文件做出了努力:

https://gist.github.com/ollyja/5fe34ba997d8fa8a3f6ff4fb883feca2

但是对 SILK 音频解码器有依赖性。

https://github.com/gaozehua/SILKCodec

但这都是用 C 编写的,我不明白如何在我的环境中使用它。有没有更简单的方法或者我想念s.th。?

感谢您的帮助

标签: python-3.xwavscapyconvertersamr

解决方案


您需要使用 AMR 解码器(ffmpeg - libavcodec)来解码 AMR 有效负载数据。

AMR 解码器将为您提供 PCM 数据,这些数据可以写入 wav 文件 (16 KHz)。

AMR 编解码器库可以与 ctypes python 接口一起使用 - 使用 C 库扩展 Python。


推荐阅读