class UsageEnvironment
这个类是顶层的容器,为万物之始。之后有啥new都带上它。
里面有个好宝贝TaskScheduler& fScheduler; f是field的意思,成员变量,与m_同。
class TaskScheduler
定义了
delayed task
backgroudhadling
eventtrigger
延迟任务就是一个队列;
事件就是一个32bit的mask,对应到一个callback 数组。
后台处理就是三大 fd_set: read write exception
singlestep
从延迟队列里面获取最近任务的超时时间。
加上所有的后台任务往 select 里面一塞,等待select返回。
有set则处理。
然后处理event,最后处理延迟任务。
这个函数放在一个while循环里面。所以轮子已经造好了,开始搭车板板了。
h264
0001 001 为帧起始,为保证唯一,协议会把数据里面的 0001 001 转码一下。
然后是 nalu 信息,然后是数据。
rtp这个协议一个包的 大小最大为 65535 ,然后如果用udp协议,还要考虑mtu,则更小。
咱一个I帧轻松突破这极限,所以一个h264的帧还要分包,置标志位。
其他没啥,其实协议挺简单,就那么几个flag,也没啥交互。