2003建网站,招人在哪里找最快,西地那非是什么药,线上营销活动案例Flutter视频渲染系列
第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频 第五章 Windows使用Native窗口渲染视频 第六章 桌面端使用texture_rgba_renderer渲染视频#xff08;本…Flutter视频渲染系列
第一章 Android使用Texture渲染视频 第二章 Windows使用Texture渲染视频 第三章 Linux使用Texture渲染视频 第四章 全平台FFICustomPainter渲染视频 第五章 Windows使用Native窗口渲染视频 第六章 桌面端使用texture_rgba_renderer渲染视频本章 文章目录 Flutter视频渲染系列前言一、如何实现1、添加插件2、创建texture3、关联texture控件4、写入bgra 二、效果预览三、问题分析四、完整代码总结 前言
前面几章介绍了flutter使用texture渲染视频的方法但是有个问题就是在每个平台都需要写一套原生代码去创建texture这样对于代码的维护是比较不利的。最好的方法应该是一套代码每个平台都能运行笔者最近刚好找到了pub上对texture封装的插件直接提供dart代码调用texture进行rgba的渲染当然只支持桌面端即Windows、Linux、Macos但依然是很方便了。本文只实现了Windows、Linux的视频渲染。 一、如何实现
1、添加插件
插件的地址是https://pub-web.flutter-io.cn/packages/texture_rgba_renderer。我们直接在pubspec.yaml添加依赖即可。 依赖
texture_rgba_renderer: ^0.0.16引用
import package:texture_rgba_renderer/texture_rgba_renderer.dart;2、创建texture
定义一个全局插件对象
final _textureRgbaRendererPlugin TextureRgbaRenderer();创建texture得到textureId
//textureId使用ValueNotifier方便刷新界面
ValueNotifierint _textureId ValueNotifierint(-1);
//参数为唯一标识符使用当前对象this的hashCode。_textureId.value await _textureRgbaRendererPlugin.createTexture(hashCode);3、关联texture控件
//ValueListenableBuilder与ValueNotifier是配套使用的方便界面刷新。
ValueListenableBuilder(valueListenable: _textureId,builder: (c, v, w) {//关联textureIdreturn Texture(textureId: _textureId.value);})),4、写入bgra
数据格式为ffmpeg的AV_PIX_FMT_BGRA
//数据地址
int adress msg[2];
//一行数据长度
int linesize msg[3];
int width msg[4];
int height msg[5];
//将bgra数据写入texture
final ptr await _textureRgbaRendererPlugin.getTexturePtr(hashCode);
Native.instance.onRgba(Pointer.fromAddress(ptr),Pointer.fromAddress(adress),height* linesize,width,height,linesize);二、效果预览
基本的一个运行效果 三、问题分析
texture_rgba_renderer: 0.0.16就目前的版本来看cpu消耗比原生写texture要高不少。主要原因是在dart写入bgra数据时插件底层先是拷贝了一次数据然后对又数据进行第二次逐行扫描拷贝到新的缓冲区对齐数据这些操作都是比较消耗cpu的尤其是逐行扫描拷贝。 四、完整代码
https://download.csdn.net/download/u013113678/88124430 注ttexture_rgba_renderer: 0.0.16的性能不算特别好请根据需求下载。 总结
以上就是今天要讲述的内容使用Ftexture_rgba_renderer实现视频渲染是笔者无意中发现的一个方法本质也是texture只是有人将其封装为了插件但是由于适应场景应该不是视频渲染虽然能使用但性能并不是特别的好。