有什么办法可以在 flutter 中实现双缓冲?
is there any way to implement double buffering in flutter?
我已经在 flutter 中用 tcp 套接字实现了一个图像流播放器。
flutter socket获取图片数据的c++服务器发送图片
图片大小约200KB ~ 1MB.
在 Flutter 中,我试图保持每秒 4 帧。
C++(服务器)和 Dart(客户端)中的套接字都可以处理该数量的数据。
但是,当我通过 Image.memory(data) 小部件显示这些数据时,它会闪烁。
(闪烁的原因,首先我认为是在Image widget正在渲染第n个数据时进入第n + 1个数据。其次,图像的大小太大以至于应用程序无法渲染没有空白的图像。)
所以我想实现双缓冲。
现在,我的 Flutter 应用程序获取数据并将其交替发送到多个流。
然后 Stack 小部件中的多个流构建器获取这些数据并通过 Image.memory() 小部件显示。
闪烁已大大减少,但仍然闪烁。
甚至,也不是真正的双缓冲方式
如果不重新渲染,则无法更改堆栈中小部件的顺序。
有什么方法或者插件吗?
谢谢。
更新
有一种方法可以让它不闪烁。无缝播放选项。
_image = Image.memory(data, gaplessPlayback: true)
Flutter 不提供对设备上实际图形库(可能是 OpenGL ES)的访问,因此没有真正的双缓冲。
视频播放的小部件是video_player you can add it via packages。
如果您无法将数据转化为与该包兼容的格式,您可以随时使用 canvas and the drawImage method. All of this probably through a custom painter.
自己绘制数据
以上两种方法应该都能轻松支持您要求的 4 fps。
我已经在 flutter 中用 tcp 套接字实现了一个图像流播放器。
flutter socket获取图片数据的c++服务器发送图片
图片大小约200KB ~ 1MB.
在 Flutter 中,我试图保持每秒 4 帧。
C++(服务器)和 Dart(客户端)中的套接字都可以处理该数量的数据。
但是,当我通过 Image.memory(data) 小部件显示这些数据时,它会闪烁。
(闪烁的原因,首先我认为是在Image widget正在渲染第n个数据时进入第n + 1个数据。其次,图像的大小太大以至于应用程序无法渲染没有空白的图像。)
所以我想实现双缓冲。
现在,我的 Flutter 应用程序获取数据并将其交替发送到多个流。
然后 Stack 小部件中的多个流构建器获取这些数据并通过 Image.memory() 小部件显示。
闪烁已大大减少,但仍然闪烁。
甚至,也不是真正的双缓冲方式
如果不重新渲染,则无法更改堆栈中小部件的顺序。
有什么方法或者插件吗?
谢谢。
更新
有一种方法可以让它不闪烁。无缝播放选项。
_image = Image.memory(data, gaplessPlayback: true)
Flutter 不提供对设备上实际图形库(可能是 OpenGL ES)的访问,因此没有真正的双缓冲。
视频播放的小部件是video_player you can add it via packages。
如果您无法将数据转化为与该包兼容的格式,您可以随时使用 canvas and the drawImage method. All of this probably through a custom painter.
自己绘制数据以上两种方法应该都能轻松支持您要求的 4 fps。