Audio 如何将字节数组转换为音频文件?
我已经编写了一个程序,可以从网络中实时获取SIP数据包,我想使用数据包中嵌入的SDP信息来捕获来自两个VOIP软电话的音频对话 一旦我从RTP协议中检索到二进制数据,我应该如何将其转换成声音文件Audio 如何将字节数组转换为音频文件?,audio,voip,rtp,sdp,jain-sip,Audio,Voip,Rtp,Sdp,Jain Sip,我已经编写了一个程序,可以从网络中实时获取SIP数据包,我想使用数据包中嵌入的SDP信息来捕获来自两个VOIP软电话的音频对话 一旦我从RTP协议中检索到二进制数据,我应该如何将其转换成声音文件 c++优先。你好,阿德里安,欢迎光临 您是对的,我们不能直接将RTP有效负载一个接一个地连接在一个文件中,然后将此文件作为音频文件读取,比如说a“.wav” 您正在寻找的缺失部分是一段代码,它将数据包的rtp流重新组装、解码并播放到语音样本中;为了简单起见,考虑众所周知的 G.711或 PCM CODE
c++优先。你好,阿德里安,欢迎光临 您是对的,我们不能直接将RTP有效负载一个接一个地连接在一个文件中,然后将此文件作为音频文件读取,比如说a
“.wav”
您正在寻找的缺失部分是一段代码,它将数据包的rtp流重新组装、解码并播放到语音样本中;为了简单起见,考虑众所周知的<代码> G.711或<代码> PCM CODEC,因为所有SIP电话支持这个编解码器。
您需要实现一个播放缓冲区
(逻辑上是一个无限缓冲区,但可以使用环绕的环形缓冲区)
数据包本身包含持续时间为20ms的小有效负载中的音频数据。每个音频数据块前面都有一个RTP头,它指示编码的类型(这与SDP信息有关,您对该部分有很好的理解)
对于每个数据包:
G.711
,以正确的速率(通常为每秒8000次)将8位值解码为16位样本.wav
或播放到音频设备- 您将所有UDP/RTP数据包收集到一个捕获文件中,并使用它来完成繁重的工作李>
- 使用现有的工具,如李>
- 为此,获取一个库或编写现有代码,但这不是一项容易的任务。例如,您可以考虑处理数据包丢失李>
我希望它能帮助你 嗨,新撰稿人!很高兴认识你!SDP是一种会话描述,这意味着它描述了您正在查看的数据类型,对于音频数据,最好查看RTP或SRTP(实时传输协议/安全实时传输协议)。因此,从SDP您可以了解如何从RTP读取数据,例如网络加密。为了给你更多的帮助,我需要一个正确的例子,一个很有帮助的例子。关于您的问题,这取决于您接收的音频数据的类型,SDP应描述类型和其他信息,如采样率、样本大小等。确定音频类型后,您需要遵循RTP规范以形成RTP数据包的帧。您好,感谢您的回复。我会尽快提供一些实际的代码作为示例。解析来自网络的sip数据包的类相当大,因此我将尝试总结:它使用正则表达式从数据包中提取所有信息,因此获取所需的rtp信息不会有问题。我计划将rtp端口输入嗅探器(我正在使用libtins库)。然后,这个嗅探器将为我提供一个字节缓冲区,该缓冲区应包含音频交换,至少我是这么认为的,因此我需要将其转换为音频文件。前提是我已经可以解析sdp数据包中的信息,并获得采样率、大小和其他参数(不确定是哪个,我的信号处理技能有点笨),我该如何将这些信息连同字节缓冲区一起转换成我能听到的内容。谢谢你为我指明了正确的方向。您好,先生。欢迎您,请不要忘记接受答案。