如何将rtp数据包有效载荷字节转换为任何音频数据?

问题描述

我在不使用任何第三方库的情况下使用Java创建项目。我已经使用DatagramSocket成功建立了udp连接。然后,我开始使用sip协议进行通信。我已经成功通过了注册和邀请阶段。这就是我将音频数据流传输到的主机和端口的方式。然后,我使用DatagramSocket成功建立了到新地址的连接。我开始以rtp数据包的形式接收数据。我设法从包中成功获取了以下数据:有效负载类型(在我的情况下为8或PCMA),时间戳,序列号和有效负载数据(字节数组)。现在,我想处理接收到的数据,以便将来使用。也就是说,保存到磁盘,随意转换为任何其他音频格式,播放音频等等。我无法弄清楚从数据包收到的字节数组到底需要做什么。

首先,我想将接收到的数据保存到AudioFormat.Encoding.PCM_FLOAT 8000.0 Hz,8位,单声道,160字节/帧格式的文件中。我该怎么办?

解决方法

使用exampleAaron Clauson解决了我的问题。来自数据包的字节数组必须根据建议的方案进行转换。我对example在Kotlin中的外观进行了工作。

example,介绍如何从原始rtp数据包中获取数据。

如果您以正确的顺序粘贴结果数组(按sequenceNumber且没有重复,则可以使用javax.sound.sampled.AudioInputStream将其写入WAV文件,如{{ 3}}。

关于如何在Android上实时播放声音流的简化example。以及example的简化方法,说明如何将声音从麦克风发送到服务器。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...