Flutter外接纹理小结

857 阅读1分钟

最近使用 Flutter 对接腾讯云的实时音视频功能(TRTC)时使用到了外接纹理来渲染远端视频到 Flutter 视图上。

从首次听说到完成功能翻阅了很多资料。看了咸鱼技术的万万没想到——flutter 这样外接纹理更是云里雾里,后来在评论区才找到了正确姿势。

正确姿势

最后做个总结吧!

  1. 在原生端创建一个对象实现FlutterTexture协议!:
#pragma mark - FlutterTexture
- (CVPixelBufferRef _Nullable)copyPixelBuffer {
    CVPixelBufferRef pixelBuffer = _latestPixelBuffer;
    return pixelBuffer;
}
  1. 返回CVPixelBufferRef

    1. 你可以这样UIimage 转 CVPixelBufferRef

    2. 你也可以使用摄像头捕获一个,如:

      -(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection{
      CVPixelBufferRef newBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
      }
    
    1. 也可以这样OpenGL 生成 CVPixelBufferRef。就是刚才那个正确姿势的文章。
  1. 实例化一个此对象注册给(NSObject <FlutterPluginRegistrar> *)registrar.textures返回一个textureId;

  2. textureId传给 Flutter 的Texture(textureId: textureId)

  3. 调用registrar.texturestextureFrameAvailable方法并传入textureId,当CVPixelBufferRef有更新再调一次就好了。

  4. 使用完了记得调用registrar.texturesunregisterTexture

至此结束。至于原理什么的我不会,也别问我,百度谷歌比我知道的多!!!