我正在Linux Ubuntu下使用Python 3.6进行工作,我使用Scapy库从包含以下堆栈的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。 ?
感谢您的帮助
答案 0 :(得分:1)
您需要使用AMR解码器(ffmpeg-libavcodec)来解码AMR有效载荷数据。
AMR解码器将为您提供PCM数据,可以将其写入到wav文件(16 KHz)中。
AMR编解码器库可与ctypes python接口一起使用-使用C库扩展Python。
答案 1 :(得分:0)
文档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-Media播放器和Linux Ubuntu的“视频”收听生成的文件。但也可以通过在线转换器“ convertio”将其转换为各种音频文件。
https://convertio.co/it/
在Python中执行此操作的直接方法是包装FFmpeg的Python库ffmpy。
https://ffmpy.readthedocs.io/en/latest/
在快速入门下,有一个解决问题的示例。