gpt4 book ai didi

java - 从扩展 RTP 数据包头解码 unix 时间戳以计算延迟

转载 作者:行者123 更新时间:2023-11-30 02:18:46 26 4
gpt4 key购买 nike

我正在开展一个项目,我试图计算使用 RTP 在两个 Android 设备之间接收的数据包的延迟。

所以我继续使用 unix 时间戳在第 12-19 个字节中扩展 RTP header 。

我现在已经收到数据包并试图从中提取 unix 时间。但是,正如您在屏幕截图中看到的那样,我在解码过程中做错了。左边是我从数据包中解码出来的时间,右边是到达时间。请忽略我手角的照片。 (对于大分辨率感到抱歉,不知道如何在 SO 上调整图像大小。 latency

我已将字节转换为十六进制,以便尝试调试在将字节数组转换为长整数时得到的巨大数字。我没有注意到很多线索,除了我的十六进制值中一致的“41”和我的长值中的“14”。

我目前不知道如何解决这个问题。 如何从我的数据包中提取正确的 Unix 时间(以毫秒为单位)?

我正在使用其他人的代码来生成我放入数据包中的字节,他使用此代码将 SSRC 放入 header (也是 64 位)中。

private void setLong(byte[] buffer, long n, int begin, int end) {
for (end--; end >= begin; end--) {
buffer[end] = (byte) (n % 256);
n >>= 8;
}
}

我的代码使用了上面的方法:

public void setUnixTime() {
for (int i=0;i<mBufferCount;i++) {
setLong(mBuffers[i], System.currentTimeMillis(),13,20);
}
}

我也对人们以这种方式计算 RTP 延迟的想法很感兴趣(在数据包上设置 unix 时间并将该时间与到达时间进行比较)。

最佳答案

我相信既然你说你的时间戳应该在字节 12-19 中,你的开始和结束也应该分别是 12 和 20。正如目前所读,您的 for 循环只会执行 7 次,最后一个字节为空。将设置字节 19、18、17、16、15、14 和 13,但永远不会设置字节 12。

此外,您可以考虑使用按位 & 而不是模运算来截断较大的数字(n & 255),因为它稍微快一些。

关于java - 从扩展 RTP 数据包头解码 unix 时间戳以计算延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28897761/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com