有什么办法可以在抖动中实现双缓冲?

时间:2020-06-22 06:58:40

标签: flutter double-buffering

我已经实现了带有tcp套接字的图像流播放器。

c ++服务器,从其获取插口的图像数据将发送图像。
图片大小约为200KB〜1MB。

在Flutter中,我试图保持每秒4帧。
C ++(服务器)和Dart(客户端)中的套接字都可以处理该数量的数据。
但是,当我通过Image.memory(data)小部件显示这些数据时,它会闪烁。
(闪烁的原因是,首先,我认为,第n + 1个数据在Image小部件正在渲染第n个数据时进入。其次,图像的大小太大,以至于应用程序无法呈现无空白的图像。) /> 所以我想实现双重缓冲。

现在,“我的Flutter”应用获取数据并将其交替发送到多个流中。
然后,堆栈小部件中的多个流构建器将获取这些数据并通过Image.memory()小部件进行显示。
闪烁已大大减少,但仍在闪烁。

即使这不是真正的双重缓冲方法。
除非再次渲染,否则无法更改堆栈中小部件的顺序。

有什么办法或插件吗?

谢谢。

更新
有一种方法可以使其不闪烁。无缝播放选项。

_image = Image.memory(data, gaplessPlayback: true)

1 个答案:

答案 0 :(得分:1)

Flutter不提供对设备上实际图形库(可能是OpenGL ES)的访问,因此没有真正的双重缓冲。

用于视频播放的小部件为video_player,您可以通过packages添加它。

如果无法将数据转换为与该程序包兼容的格式,则始终可以使用canvasdrawImage方法自己绘制数据。所有这些可能都通过custom painter

以上两种方法均应轻松支持您要求的4 fps。