我已经实现了带有tcp套接字的图像流播放器。
c ++服务器,从其获取插口的图像数据将发送图像。
图片大小约为200KB〜1MB。
在Flutter中,我试图保持每秒4帧。
C ++(服务器)和Dart(客户端)中的套接字都可以处理该数量的数据。
但是,当我通过Image.memory(data)小部件显示这些数据时,它会闪烁。
(闪烁的原因是,首先,我认为,第n + 1个数据在Image小部件正在渲染第n个数据时进入。其次,图像的大小太大,以至于应用程序无法呈现无空白的图像。) />
所以我想实现双重缓冲。
现在,“我的Flutter”应用获取数据并将其交替发送到多个流中。
然后,堆栈小部件中的多个流构建器将获取这些数据并通过Image.memory()小部件进行显示。
闪烁已大大减少,但仍在闪烁。
即使这不是真正的双重缓冲方法。
除非再次渲染,否则无法更改堆栈中小部件的顺序。
有什么办法或插件吗?
谢谢。
更新
有一种方法可以使其不闪烁。无缝播放选项。
_image = Image.memory(data, gaplessPlayback: true)
答案 0 :(得分:1)
Flutter不提供对设备上实际图形库(可能是OpenGL ES)的访问,因此没有真正的双重缓冲。
用于视频播放的小部件为video_player,您可以通过packages添加它。
如果无法将数据转换为与该程序包兼容的格式,则始终可以使用canvas和drawImage方法自己绘制数据。所有这些可能都通过custom painter。
以上两种方法均应轻松支持您要求的4 fps。