我已经实现了带有tcp套接字的图像流播放器。
c ++服务器(从该服务器获取抖动套接字)发送图像数据。
图片大小约为200KB〜1MB。
在Flutter中,我试图保持每秒4帧。
C ++(服务器)和Dart(客户端)中的套接字都可以处理该数量的数据。
但是,当我通过Image.memory(data)小部件显示那些数据时,它闪烁了。
(闪烁的原因是,第一,我想,第n + 1数据中第n个数据是由图像控件呈现得到。其次,图像的大小是如此之大,应用程序不能没有空白的渲染图像。)
所以我想要实现双重缓冲。
现在,“我的Flutter”应用程序获取数据并将其交替发送到多个流。
然后,Stack小部件中的多个流构建器获取这些数据并通过Image.memory()小部件显示。
闪烁已大大减少,但仍在闪烁。
即使,这也不是真正的双重缓冲方法。
如果不重新渲染,则无法更改堆栈中小部件的顺序。
有什么办法或插件吗?
谢谢。
更新
有一种方法可以使其不闪烁。无缝播放选项。
_image = Image.memory(data, gaplessPlayback: true)
Flutter不提供对设备上实际图形库(可能是OpenGL ES)的访问,因此没有真正的双缓冲。
用于视频播放的小部件是video_player,您可以通过软件包添加它。
如果无法将数据转换为与该程序包兼容的格式,则始终可以使用canvas和drawImage方法自己绘制数据。所有这些可能都是通过定制画家来完成的。
以上两种方法均应轻松支持您要求的4 fps。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句