python-3.x - 将 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。?
感谢您的帮助
解决方案
您需要使用 AMR 解码器(ffmpeg - libavcodec)来解码 AMR 有效负载数据。
AMR 解码器将为您提供 PCM 数据,这些数据可以写入 wav 文件 (16 KHz)。
AMR 编解码器库可以与 ctypes python 接口一起使用 - 使用 C 库扩展 Python。
推荐阅读
- pythonanywhere - pythonanwhere 新手:我没有看到 sqlite 选项
- rust - 非词法生存期借用检查器会过早释放锁吗?
- maven - 如何使用没有pom文件或settings.xml文件的maven直接将jar文件上传到nexus存储库?
- asp.net-core - 特定页面上的左侧导航栏利用每个页面的 MVC 模型数据
- python - 如果浏览器是无头的,脚本行为会发生变化
- machine-learning - 如何计算平均排名(MAR)?
- android - ListPreference 仅在第二次选择条目时更新其值
- reactjs - onClick里面的两个参数
- amazon-web-services - 使用负载均衡器为私有子网中的 RDS 路由流量
- python - Python更新csv文件