将 RTP 有效负载(有效负载类型 107,AMR-WB 16khz 1 通道)转换为.wav



我在Linux Ubuntu下使用Python 3.6,我使用Scapy lib从包含以下堆栈的bin文件中提取数据:IP/UDP/RTP。RTP-payload 类型为 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。?

感谢您的帮助

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

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

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

文档RFC4867(可以通过Google轻松找到(,第4.3,4.4和5章。首先,必须找出RTP-PAYLOAD是否具有带宽效率(第4.3章(或八位字节对齐(4.4(。在这种情况下,根据 4.3.4,它的带宽效率很高。并且必须根据第5,5.1和5.3章进行转换,然后再将其写入file.amr或file.awb(两者都有效(。

生成的文件可以使用VLC-媒体播放器和Linux Ubuntu的"视频"收听。但它也可以通过在线转换器"convertio"转换为各种音频文件。

https://convertio.co/it/

在Python中做到这一点的一个直接方法是将FFmpeg包装的Python库ffmpy。

https://ffmpy.readthedocs.io/en/latest/

在"快速入门"下,有一个用于解决问题的示例。

相关内容

最新更新