最近使用 Flutter 对接腾讯云的实时音视频功能(TRTC)时使用到了外接纹理来渲染远端视频到 Flutter 视图上。
从首次听说到完成功能翻阅了很多资料。看了咸鱼技术的万万没想到——flutter 这样外接纹理更是云里雾里,后来在评论区才找到了正确姿势。
最后做个总结吧!
- 在原生端创建一个对象实现
FlutterTexture协议!:
#pragma mark - FlutterTexture
- (CVPixelBufferRef _Nullable)copyPixelBuffer {
CVPixelBufferRef pixelBuffer = _latestPixelBuffer;
return pixelBuffer;
}
-
返回
CVPixelBufferRef-
你也可以使用摄像头捕获一个,如:
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection{ CVPixelBufferRef newBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); }- 也可以这样OpenGL 生成 CVPixelBufferRef。就是刚才那个正确姿势的文章。
-
实例化一个此对象注册给
(NSObject <FlutterPluginRegistrar> *)registrar.textures返回一个textureId; -
将
textureId传给 Flutter 的Texture(textureId: textureId) -
调用
registrar.textures的textureFrameAvailable方法并传入textureId,当CVPixelBufferRef有更新再调一次就好了。 -
使用完了记得调用
registrar.textures的unregisterTexture。