国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flutter 使用texture_rgba_renderer實現(xiàn)桌面端渲染視頻

這篇具有很好參考價值的文章主要介紹了Flutter 使用texture_rgba_renderer實現(xiàn)桌面端渲染視頻。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Flutter視頻渲染系列

第一章 Android使用Texture渲染視頻
第二章 Windows使用Texture渲染視頻
第三章 Linux使用Texture渲染視頻
第四章 全平臺FFI+CustomPainter渲染視頻
第五章 Windows使用Native窗口渲染視頻
第六章 桌面端使用texture_rgba_renderer渲染視頻(本章)



前言

前面幾章介紹了flutter使用texture渲染視頻的方法,但是有個問題就是在每個平臺都需要寫一套原生代碼去創(chuàng)建texture,這樣對于代碼的維護是比較不利的。最好的方法應該是一套代碼每個平臺都能運行,筆者最近剛好找到了pub上對texture封裝的插件,直接提供dart代碼調(diào)用texture進行rgba的渲染,當然只支持桌面端,即Windows、Linux、Macos,但依然是很方便了。


一、如何實現(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';

Flutter 使用texture_rgba_renderer實現(xiàn)桌面端渲染視頻,flutter,音視頻,flutter,音視頻,dart,windows,linux

2、創(chuàng)建texture

定義一個全局插件對象

final _textureRgbaRendererPlugin = TextureRgbaRenderer();

創(chuàng)建texture,得到textureId

//textureId,使用ValueNotifier方便刷新界面
ValueNotifier<int> _textureId = ValueNotifier<int>(-1);
//參數(shù)為唯一標識符,使用當前對象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);

二、效果預覽

基本的一個運行效果

Flutter 使用texture_rgba_renderer實現(xiàn)桌面端渲染視頻,flutter,音視頻,flutter,音視頻,dart,windows,linux


三、問題分析

texture_rgba_renderer: 0.0.16,就目前的版本來看,cpu消耗比原生寫texture要高不少。主要原因是在dart寫入bgra數(shù)據(jù)時,插件底層先是拷貝了一次數(shù)據(jù),然后對又數(shù)據(jù)進行第二次逐行掃描拷貝到新的緩沖區(qū)對齊數(shù)據(jù),這些操作都是比較消耗cpu的,尤其是逐行掃描拷貝。


四、完整代碼

https://download.csdn.net/download/u013113678/88124430
示例代碼只有Windows、Linux的視頻渲染。
注:texture_rgba_renderer: 0.0.16的性能不算特別好,請根據(jù)需求下載。


總結(jié)

以上就是今天要講述的內(nèi)容,使用texture_rgba_renderer實現(xiàn)視頻渲染是筆者無意中發(fā)現(xiàn)的一個方法,本質(zhì)也是texture,只是有人將其封裝為了插件,很大程度上方便了使用,用于預覽小的視頻畫面是完全可以的。文章來源地址http://www.zghlxwxcb.cn/news/detail-617173.html

到了這里,關(guān)于Flutter 使用texture_rgba_renderer實現(xiàn)桌面端渲染視頻的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • Flutter 即將放棄 Html renderer ,你是否支持這個提議?

    Flutter 即將放棄 Html renderer ,你是否支持這個提議?

    在之前的《Flutter Web 的未來,Wasm Native 即將到來》 中我們知道,F(xiàn)lutter 通過推進 WasmGC 的落地來支持 Dart Native ,從而讓 Flutter Web 在瀏覽器上實現(xiàn)原生的 Wasm Native 的支持, 這也是 Flutter Web 最終決定的技術(shù)路線,也就是 CanvasKit 才是Flutter Web 的未來 。 因為將 Flutter Widget 轉(zhuǎn)化為

    2024年04月09日
    瀏覽(17)
  • 使用變量作為參數(shù)的CSS rgba()函數(shù)詳解

    CSS的rgba()函數(shù)用于設(shè)置顏色值的透明度。在實際開發(fā)中,我們可能希望通過變量來動態(tài)設(shè)置顏色透明度,以實現(xiàn)更靈活的樣式效果。本文將詳細介紹如何在rgba()函數(shù)中使用變量作為參數(shù),并提供豐富的示例代碼,助你靈活控制元素的透明度。 rgba()函數(shù)是CSS3中的一種顏色函數(shù)

    2024年02月14日
    瀏覽(33)
  • flutter更新后[VERBOSE-2:FlutterDarwinContextMetalImpeller.mm(35)] Using the Impeller rendering backend,

    flutter更新后[VERBOSE-2:FlutterDarwinContextMetalImpeller.mm(35)] Using the Impeller rendering backend,

    ?在更新Flutter 3.10.0 后編譯項目出現(xiàn)上線這樣的提示,原因是在Flutter 3.10.0后 iOS 默認使用開始使用 Impeller ?。在 3.7 版本中 Impeller 就被引入用于未來替換 Skia ,F(xiàn)lutter 團隊面對 Skia 上越來越多的問題無法有效快速推進,所以走上了自研 Impeller 的道路。關(guān)閉這個提示,只需把

    2024年02月07日
    瀏覽(18)
  • flutter報錯Cannot hit test a render box that has never been laid out

    flutter報錯Cannot hit test a render box that has never been laid out

    出現(xiàn)這個問題的原因可能是因為你把一個ListView或者GridView放到了一個沒有設(shè)置大小的容器里面導致的,所以意思是不能渲染那一個沒有布局過的容器。我這里遇到的錯誤是因為我把GridView放到了一個Container里面,并且我沒有設(shè)置Container寬高。 就導致了那個錯誤: ======== Exce

    2024年01月19日
    瀏覽(22)
  • 使用紋理(Textures)

    使用紋理(Textures)

    ????????當物體表面并非是純色的時候,比如帶波點,斑紋或者表面有刮痕或被裂紋等,這些效果該如何實現(xiàn)呢? ????????這里我們需要提到一個概念是貼圖(Maps)。Maps是覆蓋在游戲物體上的2D圖片,用來設(shè)置表面的顏色、specularity或metalness、物理紋理或其他相關(guān)屬性

    2024年02月11日
    瀏覽(14)
  • 【Flutter】Flutter 使用 fluttertoast 實現(xiàn)顯示 Toast 消息

    【Flutter】Flutter 使用 fluttertoast 實現(xiàn)顯示 Toast 消息 在這篇文章中,我將與你分享如何在 Flutter 項目中使用 fluttertoast 包來顯示 Toast 消息。 Toast 是一個簡短的、非模態(tài)的消息提示框,它可以在應用的前端顯示,不會打斷用戶的操作。 fluttertoast 是一個非常受歡迎的 Flutter 包,用

    2024年02月06日
    瀏覽(19)
  • 【Flutter】Flutter 使用 table_calendar 實現(xiàn)自定義日歷

    【Flutter】Flutter 使用 table_calendar 實現(xiàn)自定義日歷 你好!今天我要為你介紹一個非常實用的 Flutter 日歷組件—— table_calendar 。這個組件不僅功能強大、高度可定制,而且使用起來非常簡單。在本文中,我會手把手教你如何使用這個組件,并分享一些實際業(yè)務中的應用示例。希

    2024年02月08日
    瀏覽(32)
  • 【Flutter】Flutter 使用 fluent_ui 實現(xiàn) Windows UI

    當然,我們將按照你的要求分批次輸出文章的正文內(nèi)容。以下是前三個章節(jié)的內(nèi)容: fluent_ui 是一個在 Flutter 中實現(xiàn) Windows UI 的包。通過使用這個包,開發(fā)者可以輕松地在 Flutter 項目中創(chuàng)建出符合 Windows UI 指南的應用程序。本文將詳細介紹 fluent_ui 的主要特性和使用方法,幫助

    2024年02月09日
    瀏覽(17)
  • Flutter使用stack來實現(xiàn)懸浮UI

    Flutter使用stack來實現(xiàn)懸浮UI

    在Flutter中,你可以使用Stack和Positioned來創(chuàng)建懸浮 UI。Stack允許你將多個小部件疊放在一起,而Positioned則用于定位小部件在Stack中的位置。 以下是一個簡單的示例,演示如何創(chuàng)建一個懸浮按鈕: 在這個例子中,MyFloatingUI是一個StatefulWidget,它包含一個Stack,其中包括了一個主要

    2024年01月25日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包