Flutter使用texture_rgba_renderer实现桌面端渲染视频详解

 更新时间:2023年07月30日 09:26:39   作者:CodeOfCC  
这篇文章主要为大家介绍了Flutter如何使用texture_rgba_renderer实现桌面端渲染视频,文中的示例代码讲解详细,需要的可以了解一下

前言

前面几章介绍了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方便刷新界面
ValueNotifier<int> _textureId = ValueNotifier<int>(-1);
//参数为唯一标识符,使用当前对象this的hashCode。
 _textureId.value = await _textureRgbaRendererPlugin.createTexture(hashCode);

3、关联texture控件

//ValueListenableBuilder与ValueNotifier是配套使用的,方便界面刷新。
ValueListenableBuilder(
                      valueListenable: _textureId,
                      builder: (c, v, w) {
                        //关联textureId
                        return 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的,尤其是逐行扫描拷贝。

到此这篇关于Flutter使用texture_rgba_renderer实现桌面端渲染视频详解的文章就介绍到这了,更多相关Flutter渲染视频内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android设置Padding和Margin(动态/静态)的方法实例

    Android设置Padding和Margin(动态/静态)的方法实例

    如何在java代码中设置margin,也就是组件与组件之间的间距,下面这篇文章主要给大家介绍了关于Android设置Padding和Margin(动态/静态)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • Android 使用Gallery实现3D相册(附效果图+Demo源码)

    Android 使用Gallery实现3D相册(附效果图+Demo源码)

    今天主要是说说如何实现Gallery的3D显示切换,Demo的代码很多是基于网上一些现成效果,感谢这些分享成果的开发者
    2013-07-07
  • Android使用ViewPager实现翻页效果

    Android使用ViewPager实现翻页效果

    这篇文章主要为大家详细介绍了Android使用ViewPager实现翻页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Android TextView添加超链接的方法示例

    Android TextView添加超链接的方法示例

    这篇文章主要介绍了Android TextView添加超链接的方法,结合实例形式分析了TextView控件添加HTML超链接的实现技巧,需要的朋友可以参考下
    2016-10-10
  • Android 自定义gradle property详解及实例代码

    Android 自定义gradle property详解及实例代码

    这篇文章主要介绍了Android 自定义gradle property详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • 退出Android程序时清除所有activity的实现方法

    退出Android程序时清除所有activity的实现方法

    这篇文章主要介绍了退出Android程序时清除所有activity的实现方法,详细分析了Android退出时清除activity的原理与实现技巧,需要的朋友可以参考下
    2016-04-04
  • Android入门之动态BroadCast的使用教程

    Android入门之动态BroadCast的使用教程

    系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机,你有一条新的微信消息,这种都是使用BroadCast机制去实现的。BroadCast分为静态和动态BroadCast两种,本文就来聊聊动态BroadCast的使用,需要的可以参考一下
    2022-12-12
  • Android 显示和隐藏软键盘的方法(手动)

    Android 显示和隐藏软键盘的方法(手动)

    在Android开发中,经常会有一个需求,做完某项操作后,隐藏键盘,也即让Android中的软键盘不显示。今天,和大家分享如何利用代码来实现对Android的软件盘的隐藏、显示的操作
    2016-01-01
  • Android快速实现一个财务APP程序详解

    Android快速实现一个财务APP程序详解

    这篇文章主要介绍了Android实现的财务APP程序,结合前后端共功能完善,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Retrofit Rxjava实现图片下载、保存并展示实例

    Retrofit Rxjava实现图片下载、保存并展示实例

    本篇文章主要介绍了Retrofit Rxjava实现图片下载、保存并展示实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06

最新评论