ZLM的Ringbuffer
1 、ringbuffer缓冲结构;以每一个新的IDR帧创建一个新的list,然后存放GOP list<list<pair node>>;当有新的reader接入的时候会先去storge中读取用于秒开的GOP缓冲。如果是已经在观看的reader,ringbuffer来一帧数据就会直接送reader显示(并保存一份数据用于新reader接入的时候进行秒开)
2、一个媒体源只有一个storge,来缓冲用于秒开的GOP,但use_gop变量可以单独设置每一个过来拉流的reader是否刷新前向GOP;(有些场景可能并不需要秒开。避免帧数据重叠)
3、点播的时候默认是不刷GOP的,因为点播是根据客户端拉流创建MP4媒体源的,不需要再刷新下GOP;这里注意点播如果点播中有seek相关命令,可能会造成输出帧重复(逻辑原因MP4点播启动定时器读数据是单独的线程,seek 后可能会跳回文件头,或者已经被读数据线程读过的位置)