ffmpeg软解中的buffer长度

异步解码和渲染的模型下,有两个buffer

一个是解码buffer,也就是原始数据过来,放入这个buffer,ffmpeg从这个buffer中取数据,拆帧,解码

另一个是渲染buffer,ffmpeg解码后的帧放入这个buffer,另一个渲染线程循环从这个buffer中读帧用于渲染

解码buffer可以稍大,因为在渲染线程起来之前,进来的数据都需要放到解码buffer中,又没有渲染线程消耗。为了保证初始化时ffmpeg能从解码buffer中正确识别帧格式,需要尽量保证初始化期间进来的数据不被抛弃。而且解码buffer本身也不应该出现积压过多或者满的情况,因为一旦真的出现满了的情况,就需要从中丢弃,而这个buffer中的数据都不是完整帧,丢弃必然会造成马赛克。

初始化后到渲染线程起来之间进来的数据,经过解码会积压在渲染buffer中,所以会导致渲染线程刚起来后,帧率很高的刷一段历史帧,之后才恢复正常。为了避免这个情况,需要降低渲染buffer长度,过于久远的帧直接丢弃,同时这样也可以保证持续的低延时。由于渲染buffer中都是完整帧,所以丢弃并不会造成马赛克,只是会跳帧。跳帧和延时,是一对鱼和熊掌。

Share

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注