【问题标题】:AMR Raw Output from Wireshark not playing in playersWireshark 的 AMR 原始输出未在播放器中播放
【发布时间】:2012-02-10 09:39:41
【问题描述】:

我有一个与 RTP 中的 AMR 编解码器相关的问题。

我有带有 AMR-NB 和 AMR-WB 编解码器的 pcap 形式的 RTP 捕获。

现在,使用 RTP 流分析,我提取了原始输出,但我无法在任何播放器中播放提取的原始输出。

有什么方法可以播放原始输出或对其进行解码并将其保存为原始格式或将其重新编码为其他格式?

问候 尼丁

【问题讨论】:

    标签: wireshark amr


    【解决方案1】:

    Wireshark 不会进行必要的转换以将 RTP AMR 有效负载转换为 .amr 文件使用的存储格式(供音频应用程序播放)

    RFC 4867 描述了各种有效负载和存储格式。我建议您阅读本文以熟悉不同的格式。然后您需要执行以下步骤:

    1. 找出正在使用的有效载荷格式(例如八位字节对齐或带宽有效)。这通常在 SIP/SDP 协商中找到
    2. 编写脚本以使用 RFC 4867 作为指南将负载转换为 .amr 文件
    3. 播放 .amr 文件或使用ffmpeg 等工具将其转换为另一种格式

    我已经粘贴了一些示例 Python 代码来进行有效负载转换 here

    【讨论】:

    • 非常感谢。!! python 脚本为我工作,现在我能够解包 RTP 有效负载。
    • 对我来说,Wireshark 将 AMR 有效负载显示为 rfc 3267。当我在 Wireshark 中保存 RTP 流时,结果与正确的 .AMR 文件有两个不同之处:它没有 @ 987654324@ 标头,它在有效的 AMR 数据包之前添加了一个额外的 SMR 字节(如 RFC 中所述)。我的解析器添加了 header 并删除了 SMR 字节,结果是 ffmpeg 可以读取的!
    • 嗨,Alex,您能否给出更准确的描述或为您的解决方案发布一些代码?那太好了。
    【解决方案2】:

    好的,让我们再写一遍: 我有一个包含 RTP 数据包的 PCAP 文件。 里面有 SIP 和 AMR 消息(宽带或窄带) 我想得到每个玩家都可以播放的对应的AMR声音文件。

    Alex Cohn 的方法似乎很简单。只需从可以从 PCAP 导出的内容中添加和删除一些位。看起来可以导出原始有效负载。

    这是否意味着 python 脚本需要这个 *.raw 数据作为输入并将文件转换为可播放的 AMR 格式,而我只需要区分 AMR-NB 或 AMR-WB?

    SID 消息呢?是否会自动插入 NO_DATA 帧?

    那么从 PCAP 开始一步步做些什么呢?

    【讨论】:

    • 正如 Alex Cohan 所说,它是数据获取的方式之一。如果使用 rupello 提供的 python 脚本,它完全解决了问题,并且能够在没有 FFMPEG 的情况下解码内容。你需要什么具体的吗?
    • 我根据您的评论更改了我的问题。谢谢你的回复,尼丁。
    • 是的,我也做了同样的事情。我对 pcap 有同样的情况。所以,我已经从 pcap 中提取了原始数据,但是在我拥有的 PDML 解析器的帮助下,然后根据 python 脚本解码了内容,但我已经用 c# 编写了代码。该代码管理所有场景,如 NB、WB 并丢弃所有其他不相关的东西。如果你愿意,我可以为你提供代码。给我你的电子邮件 ID。
    • @NitinG 你能和我分享你的代码吗?你是如何在静默期间添加 NO-DATA 帧的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多