【发布时间】:2013-05-14 08:55:24
【问题描述】:
我想通过使用反向字节顺序制作自定义 sipdroid 客户端。我认为这使得其他 Voip 客户端无法解码这些数据。
于是我阅读了 SipDroid 的代码。我发现 RTP 数据是这样的: 1. AudioRecord.read(原始PCM) 2. 编码(原始PCM,编码数据) 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);
并在receive方法末尾添加如下代码。
byte[] b = pack.getData();
reverse(b);
pack.setData(b);
我想这样,两个客户端就可以正常工作了。但它失败了。而且我不知道原因。请帮我找出原因。谢谢。
【问题讨论】:
-
听起来您希望您的数据在发送时被加密,但是颠倒字节顺序不会提供这种保护。您显示的代码应该没有任何问题。您是否尝试在不修改的情况下运行它?在那种情况下,它有效吗?
-
我知道反转方式不会为数据提供足够的保护。我只是用这个作为一个尝试。如果可行,我会将 reverse() 方法更改为一些有用的方式来加密数据。
-
如果我删除修改。两个客户端工作正常。但是在我的修改下,只有噪音。我用这两种方法打印了一个日志。我发现 send 方法只调用了一次,过程中肯定有一些数据检查。所以发送不成功。
-
那么你需要检查为什么 send 没有发送你的数据。可能有某种验证,可能是与 RTP 一起使用的本地校验和控件。
-
是的,我找到了。 RtpPacket 看起来像一个字节数组。但实际上是一个带有一些字节作为标题的结构。所以我改变了相反的过程来保留头部。发送正常。