0

我想通过使用反向字节顺序来制作一个自定义的 sipdroid 客户端。我认为这使得其他 Voip 客户端无法解码这些数据。

所以我阅读了 SipDroid 的代码。我发现 RTP 数据是这样的: 1. AudioRecord.read(originalPCM) 2. encode(originalPCM, encodedData) 3. rtp_socket.send(rtp_packet) //encodeData 是 rtp_packet 的数据部分

而另一边是: 1. rtp_receive(rtp_packet) 2. decode(encodeData, PCMData) //encodeData是rtp_packet的数据部分 3. AudioTrack.write(PCMData)

所以我修改了 SipdroidSocket 类。在发送方法中,我在开头添加了以下代码。

byte[] b = pack.getData();
reverse(b);
pack.setData(b);

并在接收方法的末尾添加以下代码。

    byte[] b = pack.getData();
    reverse(b);
    pack.setData(b);

我想这样,两个客户端就可以正常工作了。但它失败了。而且我不知道原因。请帮我找出原因。谢谢。

4

1 回答 1

0

除非一次接收 2、4、8 个字节,否则不应反转空穴缓冲区。您应该将数据视为 2、4、8 字节的元素,具体取决于数据的存储方式。我在这里看到的代码不起作用。假设您有一个数据字节缓冲区 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08 存储为 0x04030201-0x08070605 的 4 字节元素。反转空洞缓冲区将产生 0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01 这是错误的,因为如果一次反转一个元素(4 个字节),您最终会得到 0x05060708-0x04030201。请记住,元素的大小取决于值的存储方式

于 2014-08-22T15:36:36.073 回答