Flutter使用texture_rgba_renderer實現(xiàn)桌面端渲染視頻詳解
前言
前面幾章介紹了flutter使用texture渲染視頻的方法,但是有個問題就是在每個平臺都需要寫一套原生代碼去創(chuàng)建texture,這樣對于代碼的維護是比較不利的。最好的方法應(yīng)該是一套代碼每個平臺都能運行,筆者最近剛好找到了pub上對texture封裝的插件,直接提供dart代碼調(diào)用texture進行rgba的渲染,當(dāng)然只支持桌面端,即Windows、Linux、Macos,但依然是很方便了。本文只實現(xiàn)了Windows、Linux的視頻渲染。
一、如何實現(xiàn)
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、創(chuàng)建texture
定義一個全局插件對象
final _textureRgbaRendererPlugin = TextureRgbaRenderer();
創(chuàng)建texture,得到textureId
//textureId,使用ValueNotifier方便刷新界面 ValueNotifier<int> _textureId = ValueNotifier<int>(-1); //參數(shù)為唯一標識符,使用當(dāng)前對象this的hashCode。 _textureId.value = await _textureRgbaRendererPlugin.createTexture(hashCode);
3、關(guān)聯(lián)texture控件
//ValueListenableBuilder與ValueNotifier是配套使用的,方便界面刷新。
ValueListenableBuilder(
valueListenable: _textureId,
builder: (c, v, w) {
//關(guān)聯(lián)textureId
return Texture(textureId: _textureId.value);
})),4、寫入bgra
數(shù)據(jù)格式為ffmpeg的AV_PIX_FMT_BGRA
//數(shù)據(jù)地址
int adress = msg[2];
//一行數(shù)據(jù)長度
int linesize = msg[3];
int width = msg[4];
int height = msg[5];
//將bgra數(shù)據(jù)寫入texture
final ptr = await _textureRgbaRendererPlugin.getTexturePtr(hashCode);
Native.instance.onRgba(
Pointer.fromAddress(ptr),
Pointer.fromAddress(adress),
height* linesize,
width,
height,
linesize);二、效果預(yù)覽
基本的一個運行效果

三、問題分析
texture_rgba_renderer: 0.0.16,就目前的版本來看,cpu消耗比原生寫texture要高不少。主要原因是在dart寫入bgra數(shù)據(jù)時,插件底層先是拷貝了一次數(shù)據(jù),然后對又數(shù)據(jù)進行第二次逐行掃描拷貝到新的緩沖區(qū)對齊數(shù)據(jù),這些操作都是比較消耗cpu的,尤其是逐行掃描拷貝。
到此這篇關(guān)于Flutter使用texture_rgba_renderer實現(xiàn)桌面端渲染視頻詳解的文章就介紹到這了,更多相關(guān)Flutter渲染視頻內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android框架Volley使用:ImageRequest請求實現(xiàn)圖片加載
這篇文章主要介紹了Android框架Volley使用:ImageRequest請求實現(xiàn)圖片加載的相關(guān)知識,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-05-05
Android中使用自定義ViewGroup的總結(jié)
本篇文章主要介紹了Android中使用自定義ViewGroup的總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
AndroidGUI27中findViewById返回null的快速解決辦法
這篇文章主要介紹了AndroidGUI27中findViewById返回null的快速解決辦法的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-06-06
Android CoordinatorLayout詳解及實例代碼
這篇文章主要介紹了Android CoordinatorLayout詳解及實例代碼的相關(guān)資料,CoordinatorLayout基本實現(xiàn)兩個功能: 作為頂層布局 和調(diào)度協(xié)調(diào)子布局,這里詳細介紹此部分知識,需要的朋友可以參考下2016-12-12
Android Studio 恢復(fù)小窗口??磕J?Docked Mode)
這篇文章主要介紹了Android Studio 恢復(fù)小窗口??磕J?Docked Mode),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Android Studio / IDEA kotlin 顯示 var 真實類型操作
這篇文章主要介紹了Android Studio / IDEA kotlin 顯示 var 真實類型操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08

