如何处理 RTMP 中的时间戳?
How to handle timestamp in RTMP?
我正在解析来自 wireshark 捕获的 RTMP 流并将媒体数据写入 .flv 文件。我知道如何计算时间戳,但是当它溢出时我该如何处理时间戳?
delta = timestamp - previoustimestamp;
if delta > maxtimestamp / 2 {
delta = matimestamp - previoustimestamp + time stamp;}
realtimestamp += delta;
previoustimestamp = timestamp
所以我这样解决了问题:
1)解析RTMP头(从timestamp开始读取4个字节)得到timestamp(u_int 32);
if ( ( _timestamp >> 8 ) == 0xffffff ) /* check if extended timestamp is present */
{
_timestamp = (_timestamp & 0x000000ff) + 0xffffff;
}
else
{
_timestamp >>= 8 ;
}
2) 计算 .flv 文件的时间戳(.flv 文件中的时间戳总是 32 位,例如 0x00000100 是简单时间戳,等于 1,0xffffff01 是扩展时间戳,等于 0xffffff + 0x01)
if ( ( timestamp_calc + _timestamp ) >= 0xffffff )
{
unsigned __int8 temp = _timestamp;
unsigned __int8 * ptr;
if ( (timestamp_calc + _timestamp) >= 0xffffffff ){ timestamp_calc = _timestamp; }
else
{
timestamp_calc = 0xffffff;
timestamp_calc <<= 8;
ptr = (unsigned __int8 *)×tamp_calc;
ptr[ 0 ] = _timestamp;
}
}
else
{
timestamp_calc += _timestamp;
}
我正在解析来自 wireshark 捕获的 RTMP 流并将媒体数据写入 .flv 文件。我知道如何计算时间戳,但是当它溢出时我该如何处理时间戳?
delta = timestamp - previoustimestamp;
if delta > maxtimestamp / 2 {
delta = matimestamp - previoustimestamp + time stamp;}
realtimestamp += delta;
previoustimestamp = timestamp
所以我这样解决了问题: 1)解析RTMP头(从timestamp开始读取4个字节)得到timestamp(u_int 32);
if ( ( _timestamp >> 8 ) == 0xffffff ) /* check if extended timestamp is present */
{
_timestamp = (_timestamp & 0x000000ff) + 0xffffff;
}
else
{
_timestamp >>= 8 ;
}
2) 计算 .flv 文件的时间戳(.flv 文件中的时间戳总是 32 位,例如 0x00000100 是简单时间戳,等于 1,0xffffff01 是扩展时间戳,等于 0xffffff + 0x01)
if ( ( timestamp_calc + _timestamp ) >= 0xffffff )
{
unsigned __int8 temp = _timestamp;
unsigned __int8 * ptr;
if ( (timestamp_calc + _timestamp) >= 0xffffffff ){ timestamp_calc = _timestamp; }
else
{
timestamp_calc = 0xffffff;
timestamp_calc <<= 8;
ptr = (unsigned __int8 *)×tamp_calc;
ptr[ 0 ] = _timestamp;
}
}
else
{
timestamp_calc += _timestamp;
}