请教 Flutter ios 外接纹理, copyPixelBuffer 只被调用了一次

2019-07-10 00:58:51 +08:00
 befovy

尝试用 flutter 做一个视频应用,anroid 端成功接入了 surfaceTexture 可以显示视频。

但是在 iOS 端外接纹理时, 实现 FlutterTexture

并使用了 FlutterTextureRegistry registerTexture 成功注册。

但是视频没有显示出来,调试发现 copyPixelBuffer 只被调用了一次,在这一次调用中,由于视频还没有准备好,所以返回了空。

但是后续 copyPixelBuffer 不被调用了, 是什么原因,有 V 友了解吗? 是否和第一次调用返回 nil 有关系?

10525 次点击
所在节点    Flutter
4 条回复
befovy
2019-07-11 09:29:05 +08:00
我自己来回答一下吧。

```objc
@protocol FlutterTextureRegistry <NSObject>
- (int64_t)registerTexture:(NSObject<FlutterTexture>*)texture;
- (void)textureFrameAvailable:(int64_t)textureId;
- (void)unregisterTexture:(int64_t)textureId;
@end
```

每次有新的图像准备好之后, 调用 `textureFrameAvailable` 告诉 flutter, 应该更新显示了。
然后 flutter 就会调用 `copyPixelBuffer` 获取 pixelbuffer 并显示。

另外需要注意 copyPixelBuffer 返回的 pixelbuffer 需要是 BGRA32 格式的才行,这一点文档中也没提到,真是个坑
zinwalin
2020-01-09 13:32:22 +08:00
性能怎样?
zinwalin
2020-01-09 13:39:47 +08:00
有没有 demo 可以分享下, 谢谢。
befovy
2020-02-18 11:16:01 +08:00
@zinwalin demo 的话可以看我的项目 befovy/fijkplayer
播放视频性能可以,但没有做严格的性能对比分析

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/581541

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX