最近做项目,需要计算视频包的时延。这里需要在RTP头部传输时间戳。
RTP包头的第2个32Bit即为RTP包的时间戳,Time Stamp ,占32位;
项目需要计算每一帧的延时,32位
sizeof(Byte)是8位,所以只能放4个。
本项目采用大端模式,即高位在前,低位在后。
所以能存的最大的数是2的31次方-1,10进制数为2147483647。
以毫秒为单位的时间戳十进制要有13位,存不下。以秒为单位的,不够精确,所以我想着把时间戳-1636560000000(2021年11月11日0点0分0秒)然后存下来。
*1000是为了使时间戳精确到毫秒。
-(void)setStamp{
long Stamp2 = [[NSDate date] timeIntervalSince1970]*1000;
long Stamp = Stamp2-1636560000000;
Byte valueBytes[4];
Bytes[0]=(Byte)(Stamp/65536/256);
Bytes[1]=(Byte)((Stamp/65536)%256);
Bytes[2]=(Byte)((Stamp/256)%256);
Bytes[3]=(Byte)(Stamp%256);
memcpy(_dataV+4*sizeof(Byte), Bytes, 4);
}
-(int)getStamp{
return (_dataV[4] & 0xFF) * 0x1000000 +
(_dataV[5] & 0xFF) * 0x10000 +
(_dataV[6] & 0xFF) * 0x100 +
(_dataV[7] & 0xFF);
}
因为项目要求就是算差值,这样就可以计算了。
如果想知道发送视频帧的时间,只需要➕1636560000000就好了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)