2013-05-14 77 views
0

我想通过使用反向字节顺序来自定义sipdroid客户端。我认为这使得其他VoIP客户端无法解码这些数据。sipdroid数据加密失败

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

而另侧是: 1. rtp_receive(rtp_packet) 2.解码(encodeData,PCMData)//的encodeData是rtp_packet的数据部分 3. AudioTrack.write(PCMData)

所以我修改SipdroidSocket类。在send方法中,我在开始处添加以下代码。

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

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

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

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

+0

听起来好像您希望数据在发送时被加密,但是颠倒字节顺序不会提供这种保护。 您显示的代码不应该有任何问题。你有没有试过在没有修改的情况下运行这个?在那种情况下,它有效吗? – Flipbed 2013-05-14 09:00:21

+0

我知道倒车的方式不会给数据足够的保护。我只是用这个作为一个尝试。如果有效,我会将reverse()方法更改为加密数据的一种有用方法。 – Fakebear 2013-05-14 09:02:53

+0

如果我删除修改。这两个客户端工作正常。但随着我的修改,只有噪音。我在这两种方法中打印日志。我发现send方法只调用一次,在这个过程中必须有一些数据检查。所以发送不成功。 – Fakebear 2013-05-14 09:05:40

回答

0

除非您一次收到2,4,8个字节,否则不应该翻转孔缓冲区。 根据数据的存储方式,您应该将数据视为2,4,8个字节的元素。我在这里看到的代码不起作用。 假设您有一个数据字节0x01,0x02,0x03,0x04,0x05,0x06,0x0,07,0x08 的缓冲区,存储为0x04030201-0x08070605的4字节元素。 反转孔缓冲区将产生0x08,0x0,07,0x0,6,0x05,0x04,0x03,0x02,0x01 这是错误的,因为您将以0x05060708-0x04030201 结束如果一次反转一个元素(4字节)。 请记住,元素的大小取决于值的存储方式