gpt4 book ai didi

audio - 如何将字节数组转换为音频文件?

转载 作者:行者123 更新时间:2023-12-03 00:26:51 32 4
gpt4 key购买 nike

我编写了一个从网络实时获取 SIP 数据包的程序,我想使用数据包中嵌入的 SDP 信息来捕获来自两个 VOIP 软电话的音频对话。

从 RTP 协议(protocol)中检索二进制数据后,我应该如何将其转换为声音文件?

c++ 首选。

最佳答案

嗨,阿德里安,欢迎,

你是对的,我们不能直接把 RTP 一个文件中的有效负载一个接一个地连接,然后将该文件作为音频文件读取,假设是 ".wav" .

您正在寻找的缺失部分是一段代码,该代码将数据包的 rtp 流重新组装、解码和播放为语音样本;为简单起见,考虑众所周知的 G.711PCM编解码器,因为所有 SIP 电话都支持此编解码器。
您需要实现 Playout buffer (从逻辑上讲,一个无限缓冲区,但一个环绕的环形缓冲区是可以的)。

数据包本身包含持续时间为 20 毫秒的小负载中的音频数据。每个音频数据 block 前面都有一个 RTP header ,它指示编码的类型(这与 SDP 信息有关,您对那部分有很好的理解)。

对于每个数据包:

  • 以正确的速率将 8 位值解码为 16 位样本,对于 G.711,通常每秒 8,000 次;
  • 从 RTP 头计算播放点,它是播放缓冲区数组中的索引。
    考虑基于 RTP 时间戳的抖动和重新排序
  • 将样本写入 .wav或将其播放到音频设备。

  • 从实用的角度来看,您可以通过以下几种方式做到这一点:
  • 您在捕获文件中收集所有 UDP/RTP 数据包并使用 wireshark 做艰苦的工作;
  • 使用现有工具,例如 playSIP A command-line SIP session recorder ;
  • 为此目的获取一个库或编写现有代码,但这不是一件容易的事。例如,您可以考虑处理丢包。
  • 关于audio - 如何将字节数组转换为音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57596553/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com