uint32_t capacity = rtmpMsg.length + rtmpMsg.length/m_outChunkSize*5 + 1024; 这里是怎么算的?
o-u-p opened this issue · 2 comments
o-u-p commented
如题, 大神请教一下这里是怎么算的, 有相关参考资料么, 谢谢!
PHZ76 commented
这个没有啥复杂的逻辑,5 是每个块的所需的包头最大大小。就是计算一下当前帧需要分成多少块,每个块需要多少额外空间。1024 是我自己预留的,可以不用。至于块的包头大小你可以看看rtmp的文档,每种类型块的包头都有介绍。
o-u-p commented
元旦快乐啊, 老哥!我看了下文档,似乎Basic Header(1-3字节)和Message Header(0,3,7,11字节)加起来也不止5个字节啊, 还有这里
if (fmt <= 2)
{
if(rtmpMsg._timestamp < 0xffffff)
{
writeUint24BE((char*)buf, (uint32_t)rtmpMsg._timestamp);
}
else
{
writeUint24BE((char*)buf, 0xffffff);
}
len += 3;
}
if (fmt <= 1)
{
writeUint24BE((char*)buf + len, rtmpMsg.length);
len += 3;
buf[len++] = rtmpMsg.typeId;
}
if (fmt == 0)
{
writeUint32LE((char*)buf + len, rtmpMsg.streamId);
len += 4;
}
fmt==1 || 2 的时候存的是timestamp delta, 似乎是和上一个chunk timestamp的差值。。。