我想通过使用反向字节顺序来创建自定义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类。在send方法中,我在开头添加以下代码。
byte[] b = pack.getData();
reverse(b);
pack.setData(b);
并在receive方法的末尾添加以下代码。
byte[] b = pack.getData();
reverse(b);
pack.setData(b);
我认为通过这种方式,两个客户端可以照常工作。但它失败了。我不知道原因。请帮我找出原因。感谢。
答案 0 :(得分: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 这是错误的,因为你最终会得到0x05060708-0x04030201 如果一次反转一个元素(4个字节)。 请记住,元素的大小取决于值的存储方式