RTMP协议是基于TCP的协议,将应用层的消息分割成chunk用tcp发送,除了增大chunk到很大的数避免分片譬如60000,还可以优化发包方式,将很多小包组合到一起了一次发送给客户端,避免每个小包分开发送,每次tcp的来回都很费劲呐。
先看一个没有优化的例子,一个知名的cdn的rtmp的序列,一共花了39个TCP包才开始传输数据包,前面都是磨磨唧唧的rtmp握手和交互:
SRS对于RTMP已经做了优化,组合了一些小包,可以减少大约10个包。见下图:
SRS并非是效率最高的,还可以继续榨取,将其中的一些包再减少一些,达到最少的tcp交互,就开始发送数据包,BMS的优化结果如下:
以最少的tcp包完成交互,在同等网速下,srs和bms的的传输效果是最好的。
备注:为了方便wireshark解析正确,SRS和BMS的chunk size都设置为了128,实际上srs和bms的默认chunk size都是60000(虽然wireshark解析不正常,不影响播放器播放)。