![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
flutter
文章平均质量分 83
CodeOfCC
c++ 音视频开发
展开
-
Flutter 实现软鼠标
flutter在嵌入式系统中运行时,有可能遇到drm鼠标无法使用的情况,但鼠标事件却可以正常接收,此时如果有软鼠标,就可以一定程度解决问题。本文提供了一个软鼠标的简单实现。以上就是今天要讲的内容,本文实现的软鼠标还是比较简单的,当然软鼠标对性能还是有一定的影响的,比如在linux中,每次移动都会触发交换缓存进行drm显示。原创 2024-06-17 09:47:51 · 543 阅读 · 0 评论 -
Flutter 实现StackAllocator简化FFI局部变量的内存管理
使用Flutter通过FFI调用c库的时候,经常需要传字符串或者一些指针变量,这里变量通常都是局部变量,在一个代码块运行完成后就不需要了,我们通常用calloc进行内存申请和释放,但这也带来了一个麻烦,每个变量都需要单独释放,且字符串必须用变量进行释放,不能直接使用字面量作为参数,否则就内存泄漏了。本文提供一种针对上述问题的简化操作。我们实现一个Allocator,用于局部的内存管理,就可以省去每个变量内存释放这个步骤。salloc是一个用于管理局部变量的Allocator。原创 2024-06-16 16:34:51 · 513 阅读 · 0 评论 -
Flutter 简化线程Isolate的使用
flutter的线程是数据独立的,每个线程一般通过sendport来传输数据,这样使得线程调用没那么方便,本文将提供一种支持lambda启动isolate的方法,且支持捕获值类型变量,以及支持返回值。以上就是今天要讲的内容,本文的提供线程启动方法,很大程度方便了使用,尤其是支持lambda,可以在任意上下文捕获变量开启线程,执行任务,并获取返回值,用法和Future就很类似了,可以当成异步的另一种选择。原创 2024-06-13 12:21:13 · 576 阅读 · 0 评论 -
Flutter 简化CustomPainter的绘制
使用Flutter做界面时,有时会需要需要自绘的控件,比如异形按钮或者显示视频,我们通常可以用CustomPainter实现。但是CustomPainter是一个抽象类,需要继承并实现绘制方法,才能进行绘制。本文对CustomPainter进行了一个简单的封装,简化绘制操作。原创 2024-06-11 17:47:50 · 670 阅读 · 0 评论 -
Flutter 实现dispose探测控件
开发flutter一般会用状态管理工具,用了状态管理后大部分控件都会是StatelessWidget,StatefulWidget有dispose重载获取控件销毁时机,但StatelessWidget则没有,此时我们要获取控件销毁的时机就需要另寻他法了。这是一个控件用于帮助探测无状态控件的销毁时机,有点类似用于探测控件的显示和隐藏。/// 创建人: xin/// 创建时间: 2023/6/15 13:44/// 注释: 销毁探测控件final S?tag;//自定义数据this.tag,原创 2024-06-10 13:44:28 · 901 阅读 · 0 评论 -
Flutter 使用ffigen生成ffmpeg的dart接口
前面几章介绍了flutter各种视频渲染的方法,视频渲染前显然是需要先获取视频流并解码,这些操作就需要用到ffmpeg,前面的几章的解码都是通过c语言调用ffmpeg,再将数据传输到dart渲染的。本章将提供一种生成ffmpeg dart接口的方法,直接用dart就可以调用ffmpeg进行拉流并解码然后显示。原创 2024-06-08 12:09:39 · 1387 阅读 · 1 评论 -
Flutter 使用Texture实现Android渲染视频
flutter渲染视频的方法有多种,比如texture、platformview、ffi,其中texture是通过flutter自己提供的一个texture对象与dart界面关联后进行渲染,很容易搜索到android和ios的相关资料,但是大部分资料不够详细,尤其是jni渲染部分基本都略过了,对于使用flutter但不熟悉安卓的情况下,是比较难搞清楚拿到通过texure拿到surface之后该怎么渲染。所以本文将说明整体的渲染流程。......原创 2022-06-29 22:34:54 · 2919 阅读 · 0 评论 -
Flutter 使用FFI+CustomPainter实现全平台渲染视频
前面几章介绍了flutter使用texture渲染视频的方法,但是有个问题就是在每个平台都需要写一套原生代码去创建texture,这样对于代码的维护是比较不利的。最好的方法应该是一套代码每个平台都能运行,于是有了一个设想,使用c++实现跨平台的视频采集,通过ffi将数据传到dart界面,通过画布控件将图像绘制出来。最终通过测试发现能用的方案就是ffi结合CustomPainter实现视频渲染,这种方式实现的视频渲染可以做到**一套代码所有平台(除web外)都可运行**。原创 2022-11-23 00:46:38 · 2589 阅读 · 2 评论 -
Flutter 使用Texture实现Windows渲染视频
flutter渲染视频的方法有多种,比如texture、platformview、ffi,其中texture是通过flutter自己提供的一个texture对象与dart界面关联后进行渲染,很容易搜索到android和ios的相关资料,但是windows却几乎找不到。通过查看一些开源库的代码,找出了再windows使用texture渲染的方法,在这里做一个简单的介绍。..................原创 2022-06-27 22:31:15 · 3762 阅读 · 20 评论 -
Flutter 使用Texture实现Linux渲染视频
flutter渲染视频的方法有多种,比如texture、platformview、ffi,其中texture是通过flutter自己提供的一个texture对象与dart界面关联后进行渲染,很容易搜索到android和ios的相关资料,但是Linux上却几乎找不到任何资料。通过查看一些开源库的代码,才找到Linux上使用flutter texture的方法,在这里做一个简单的介绍。............原创 2022-06-28 21:32:26 · 2459 阅读 · 0 评论 -
Flutter 实现按位置大小比例布局的控件
做视频监控项目时需要需要展示多分屏,比如2x2、3x3、414等等,如果每一种分屏都单独实现会很麻烦,而且不能支持用户定制。最好的方式还是实现一个通用的分屏容器,而且采样比例计算位置大小,可以适配任意尺寸。原创 2023-08-04 11:39:41 · 2357 阅读 · 0 评论 -
Flutter 使用texture_rgba_renderer实现桌面端渲染视频
前面几章介绍了flutter使用texture渲染视频的方法,但是有个问题就是在每个平台都需要写一套原生代码去创建texture,这样对于代码的维护是比较不利的。最好的方法应该是一套代码每个平台都能运行,笔者最近刚好找到了pub上对texture封装的插件,直接提供dart代码调用texture进行rgba的渲染,当然只支持桌面端,即Windows、Linux、Macos,但依然是很方便了。本文实现了Windows、Linux的视频渲染。原创 2023-07-29 22:20:31 · 1447 阅读 · 5 评论 -
Flutter Windows通过嵌入Native窗口实现渲染视频
使用flutter在Windows上渲染视频,目前掌握的至少有2种方法(第二章、第四章),但是性能都不是最佳,而且需要将数据转换成rgba才能渲染。如果能使用win32窗口,直接通过句柄渲染,那就可以达到与原生Windows渲染使用一致的效果,可以使用sdl渲染yuv,以及dxva2解码后d3d9表面直接渲染到窗口全程在gpu上操作。本文将介绍如何在flutter程序嵌入win32窗口并且渲染视频。但是需要注意的是目前的实现只支持win10及以上版本。原创 2023-07-22 01:00:49 · 1359 阅读 · 0 评论 -
Flutter 实现任意控件拖动
使用flutter开发是需要控件能拖动,比如画板中的元素,或者工具条,搜索框,每个都单独去实现拖动还是比较麻烦的,将拖动功能封装成一个控件,需要的时候直接使用拖动控件作为父控件这样就方便很多了。以上就是今天要讲的内容,本文提供了一种简单的拖动控件实现,尤其是封装成容器后使用变得很简单,主要在于能想到translate变换可以改变位置,在了解通过GlobalKey获取控件大小以及获取控件大小的方法,很容易就实现拖动功能了。原创 2023-07-01 14:37:38 · 3023 阅读 · 2 评论