新聞中心
Flutter TextTrue ios 視頻渲染 YUV420 轉(zhuǎn)換 BGRA
網(wǎng)易云信播放器 Flutter 封裝
創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供做網(wǎng)站、成都網(wǎng)站設(shè)計服務(wù),網(wǎng)站設(shè)計,成都網(wǎng)站托管等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對手中脫穎而出創(chuàng)新互聯(lián)建站。
事情是這樣的 我們公司的業(yè)務(wù)是有 視頻播放這一塊業(yè)務(wù) 而且 是基于網(wǎng)易云信的 視頻服務(wù)的 做的開發(fā) 。公司的App開發(fā)框架是使用 Flutter , 那么問題來了 Flutter 怎么 實現(xiàn)視頻播放嘞 , 官方給出的解決方案 是 ### video_player 這個庫的 實現(xiàn) 是 原生端做視頻解碼 然后通過 Texture 的方式 映射到 Flutter 中 但是解碼器 IOS 使用的是 官方的 AVPlayer (蘋果官方提供的播放器 啥都好 就是不支持流媒體播放 ) Android 解碼器則是 exoplayer 很好很nice
但是
網(wǎng)易云信的視頻 是加密的 只有自己的 播放器sdk 在能解碼播放 android 和 ios 都支持流媒體 so 只能自己封裝
Android 使用 SurfaceTexture 銜接 視頻流 正常 但是 ios emmm 網(wǎng)易云信 播放器 返回 的 編碼格式 是 NELP_YUV420 就是 YUV420 直接映射到 Flutter 黑屏 但是有聲音
因為Skia 引擎底層只支持了 BGRA 格式的視頻數(shù)據(jù) 所以 和黑屏了
首先我們吧 YUV420 轉(zhuǎn)換成 CVPixelBufferRef 方法如下
該方法依賴 libyuv 請自行導(dǎo)入
然后是 pixelBuffer To SampleBuffer
最后吧 SmapleBuffer 轉(zhuǎn)換 BGRA
方法如何使用
.bat給html文件內(nèi)容加注釋,或者刪除該行(就一個文件一行代碼)?
不清楚你的實際文件/情況,僅以問題中的樣例說明及猜測為據(jù);以下代碼復(fù)制粘貼到記事本,另存為xx.bat,編碼選ANSI
# :
cls
@echo off
rem 將一個html文件內(nèi)的指定字符串內(nèi)容刪除
set #=Any questionset @=WXset $=Qset/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312')))) -Args '%~f0'"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#
$htmlfile="D:\xxx\index.html";
$self=get-item -liter $args[0];
$path=$self.Directory.FullName;
$enc=New-Object System.Text.UTF8Encoding $False;
$text=[IO.File]::ReadAllText($htmlfile, $enc);
$text=$text.replace('base href="/"', '');
[IO.File]::WriteAllText($htmlfile, $text, $enc);
Flutter 上字體的另類玩法:FontFeature
在以前的 《Flutter 上默認(rèn)的文本和字體知識點》 和 《帶你深入理解 Flutter 中的字體“冷”知識》 中,已經(jīng)介紹了很多 Flutter 上關(guān)于字體有趣的知識點,而本篇講繼續(xù)介紹 Flutter 上關(guān)于 Text 的一個屬性: FontFeature , 事實上相較于 Flutter ,本篇內(nèi)容可能和前端或者設(shè)計關(guān)系更密切 。
什么是 FontFeature ? 簡單來說就是影響字體形狀的一個屬性 ,在前端的對應(yīng)領(lǐng)域里應(yīng)該是 font-feature-settings ,它有別于 FontFamily ,是用于指定字體內(nèi)字的形狀的一個參數(shù)。
我們知道 Flutter 默認(rèn)在 Android 上使用的是 Roboto 字體,而在 iOS 上使用的是 SF 字體,但是其實 Roboto 字體也是分很多類型的,比如你去查閱手機(jī)的 system/fonts 目錄,就會發(fā)現(xiàn)很多帶有 Roboto 字樣的字體庫存在。
所以 Roboto 之類的字體庫是一個很大的字體集,不同的 font-weight 其實對應(yīng)著不同的 ttf ,例如默認(rèn)情況下的 Roboto 是不支持 font-weight 為 600 的配置 :
所以如下圖所示,如果我們設(shè)置了 w400 - w700 的 weight ,可以很明顯看到中間的 500 和 600 其實是一樣的粗細(xì),所以在 設(shè)置 weight 或者設(shè)計 UI 時,就需要考慮不同平臺上的 weight 是否支持想要的效果 。
回歸到 FontFeature 上,那 Roboto 自己默認(rèn)支持多少種 features 呢? 答案是 26 種,它們的編碼如下所示,運(yùn)行后效果也如下圖所示,從日常使用上看,這 26 種 Feature 基本滿足開發(fā)的大部分需求。
而 iOS 上的 SF pro 默認(rèn)支持 39 種 Features , 它們的編碼如下所示,運(yùn)行后效果也如下圖所示,可以看到 SF pro 支持的 Features 更多。
所以可以看到,并不是所有字體支持的 Features 都是一樣的,比如 iOS 上支持 sups 上標(biāo)顯示和 subs 下標(biāo)顯示,但是 Android 上的 Roboto 并不支持,甚至很多第三方字體其實并不支持 Features 。
有趣的是,在 Flutter Web 有一個渲染文本時會變模糊的問題 #58159 ,這個問題目前官方還沒有修復(fù),但是你可以通過給 Text 設(shè)置任意 FontFeatures 來解決這個問題。
最后,如果對 FontFeature 還感興趣的朋友,可以通過一下資料深入了解,如果你還有什么關(guān)于字體上的問題,歡迎留言討論。
基于網(wǎng)友的問題再補(bǔ)充一下拓展知識,畢竟這方面內(nèi)容也不多 。
事實上在 dart 里就可以看到對應(yīng) FontWeight 約定俗稱用的是字體集里的什么字體:
所以如果對于默認(rèn)字體有疑問,可以在你的手機(jī)字體找找是否有對應(yīng)的字體, 比如雖然我們說 roboto 沒有 600 ,但是如果是 roboto mono 字體集是有 600 的 fontweight ,甚至還有 600 斜體: 。
另外注意這是 Flutter 而不是原生,具體實現(xiàn)調(diào)用是在 Engine 的 paragraph_skia.cc 和 paragraph_builder_skia.cc 下對應(yīng)的 setFontFamilies 相關(guān)邏輯,當(dāng)然默認(rèn)字體庫指定在 typography.dart 下就看到,例如 'Roboto' 、 '.SF UI Display' 、 '.SF UI Text' 、 '.AppleSystemUIFont' 、 'Segoe UI' :
另外如果你在 Mac 的 Web 上使用 Flutter Web,可以看到指定的是 .AppleSystemUIFont ,而對于 .AppleSystemUIFont 它其實不算是一種字體,而是蘋果上字體的一種集合別稱:
[圖片上傳失敗...(image-40f5ce-1648368234737)]
還有,如果你去看 Flutter 默認(rèn)自帶的 cupertino/context_menu_action.dart ,就可以看到一個有趣的情況:
當(dāng)然,前面我們說了那么多,主要是針對英文的情況下,而在中文下還是有差異的 ,之前的文章也介紹過:
例如,在蘋果上的簡體中文其實會是 PingFang SC 字體,對應(yīng)還有 PingFang TC 和 PingFang HK 的繁體集,而關(guān)于這個問題在 Flutter 上之前還出現(xiàn)過比較有意思的 bug :
當(dāng)然后續(xù)的 #16709 修復(fù)了這個問題 ,而在以前的文章我也講過,當(dāng)時我遇到了 “Flutter 在 iOS 系統(tǒng)上,系統(tǒng)語言是韓文時,在和中文一起出現(xiàn)會導(dǎo)致字體顯示異常" 的問題 :
解決方法也很簡單,就是給 fontFamilyFallback 配置上 ["PingFang SC" , "Heiti SC"] 就可以了,這是因為韓文在蘋果手機(jī)上使用的應(yīng)該是 Apple SD Gothic Neo 這樣的超集字體庫,【廣】這個字符在這個字體集上是不存在的,所以就變成了中文的【廣】;
所以可以看到,字體相關(guān)是一個平時很少會深入接觸的東西,但是一旦涉及多語言和繪制,就很容易碰到問題的領(lǐng)域 。
開源精粹(二)!22個實用、有趣的開源項目
作為一名開源愛好者,發(fā)掘優(yōu)秀的開源項目是一件非常有趣的事情。在第一期中,我分享了單頁個人網(wǎng)站模板、組裝式 Flutter 應(yīng)用框架、PHP 客戶端庫、Java 診斷工具等一些實用的庫和工具。本期依舊會為大家分享一些前端、后端、移動開發(fā)的相關(guān)工具,希望你能“淘”到適合自己的工具。
1.Vue-EasyTable
Vue-EasyTable 是一款基于 Vue2.x 的 table 組件,具備自適應(yīng)、表頭與列固定、自定義單元格樣式、自定義 Loading 等功能。
2.React-Calendar
這是一款具備原生日期格式的日歷組件。它不依賴 Moment.js,支持日期選擇范圍,涵蓋了各國語言,開箱即用。
3.Matter
CSS 實現(xiàn)的 Material 組件合集項目,作者已將部分作品開源,效果可以在 CodePen 上查看。
4.Revery
Revery 是一款用于構(gòu)建高性能、跨平臺桌面應(yīng)用的框架。它類似于加速版的原生 Electron,除了擁有類似 React / Redux 的庫,還具備 GPU 加速渲染功能,其內(nèi)置的編譯器速度也相當(dāng)快。
5.Web Accessibility Guide
這是一個精選了 Web 可訪問性貼士、技巧和最佳實踐的開源項目,你將會學(xué)習(xí)到一些改善 Web 可訪問性的實用做法。
1.SOFAJRaft
SOFAJRaft 是螞蟻金服開源的生產(chǎn)級 Java Raft 算法庫,它基于 Raft 一致性算法的生產(chǎn)級高性能 Java 實現(xiàn),支持 MULTI-RAFT-GROUP,適用于高負(fù)載低延遲的場景,易于使用。
2. Dragonwell
阿里開源了 OpenJDK 發(fā)行版 Dragonwell,它提供長期支持,包括性能增強(qiáng)和安全修復(fù)。在數(shù)據(jù)中心大規(guī)模 Java 應(yīng)用部署情況下,可以大幅度提高穩(wěn)定性、效率以及性能。
3.Lawoole
Lawoole 是一款基于 Laravel 和 Swoole 的高性能 PHP 框架。它兼具了 Laravel 的特點,還解決了其功能背后的性能問題。同時,你還能感受到與 Laravel 一樣的編碼體驗。
4.AntNest
AntNest 是一個簡潔、快速的異步爬蟲框架。它僅有 600 行代碼,基于 Python 3.6+.
5.PHP-Awesome
這個倉庫匯集了 PHP 優(yōu)秀的資源,供你查詢和參考。
1.FlutterBoost
FlutterBoost 是閑魚開源的新一代 Flutter-Native 混合解決方案。它能夠幫你處理頁面的映射和跳轉(zhuǎn),你只需要關(guān)心頁面的名字和參數(shù)即可。
2.MyLayout
MyLayout 是一套 iOS 界面視圖布局框架,可謂 iOS 下的界面布局利器。它集成了 iOS Autolayout、Size Classes、Android 的 5 大布局體系、HTML/CSS 的浮動定位技術(shù)以及 Flex-Box 和 Bootstrap 框架等主流的平臺的界面布局功能,并提供了一套簡單、完備的多屏幕尺寸適配的解決方案。
3.SegementSlide
SegementSlide 是一個 iOS UI 庫,它具備完整的滑滾及切換組件,旨在解決多層 UIScrollView 嵌套滾動的問題。
1.DevHub
DevHub 是一款跨平臺的 GitHub 通知管理客戶端,支持 Android、 iOS、網(wǎng)頁和桌面上使用,幫助你便捷的接收 GitHub 各類通知。
2.Reqman
Reqman 是一個幫助后端工程師進(jìn)行 API 測試的工具,同時也是一個基于 Node.js 的爬蟲工具。
3.FreeCodeCamp
說到 FreeCodeCamp,或許大家不會陌生,而這個項目就是他們建立的開源課程和相應(yīng)的代碼庫。網(wǎng)站提供了 6 大認(rèn)證課程,也涉及了全棧開發(fā)認(rèn)證。如果你感興趣,不妨了解下。
4.Gitter
Gitter 是 GitHub 小程序客戶端,作者采用 Taro 框架 + Taro UI 進(jìn)行開發(fā),而小程序內(nèi)數(shù)據(jù)則來自 GitHub Api V3.
5.Awesome Podcasts
這個項目收集了各類實用的播客,涵蓋了主流的編程語言,希望對你提升技術(shù)水平有所幫助。
6.編程圖書大全
書籍不光能在你迷茫的時候,給予你答案,還能在你提升技能的時候,給予你幫助。這個倉庫收集了眾多編程圖書,涉及主流編程語言、人工智能、算法、Linux、大數(shù)據(jù)等。看看,有木有你需要的。
7.VS Code Netease Music
很多開發(fā)者喜歡邊寫代碼,邊聽音樂,VS Code Netease Music 這個插件就能滿足你在 VS Code 上聽歌的愿望。它使用 Webview 實現(xiàn),不依賴命令行播放器。
Star-Battle
Star-Battle 是一款使用 JavaScript ES6、Canvas 開發(fā)的飛船射擊類 游戲 。來 Enjoy 吧。
注:
如需轉(zhuǎn)載,煩請按下方注明出處信息,謝謝!
離不開DART的Flutter(dart篇)
hello world例子
在終端打印字符串‘Hello World!’
計算斐波那契數(shù)列
一個簡單的類
計算兩點距離
異步并發(fā)示例
使用了Isolate
1.面向?qū)ο?/p>
對于面向?qū)ο筮@個概念,相信了解Java的同學(xué)對這個概念一定不會陌生。
例如:我們有個Person Object他有很多特征和行為。
這些都是這個Person Object的屬性。
也就是因為有了這些特征,行為等等才決定了這個人是誰。
那么回到Dart當(dāng)中,所有的都是對象,那么在就可以可以跟進(jìn)對象的屬性的特征,方法等等來進(jìn)行編程。
之所以我們在這里又特別強(qiáng)調(diào)了一下面向?qū)ο蟮母拍?,是因為這個概念在Dart語言當(dāng)中,至關(guān)重要!
2.最重要的幾個概念
3.Dart的部分特性
4.Dart的內(nèi)置庫
包名
描述
dart:asynv
異步編程,提供Future,Stream類
dart:collection
集合
dart:convert
不同類型的字符編碼解碼
dart:core
Dart語言核心功能,內(nèi)置類型
dart:html
網(wǎng)頁開發(fā)用到的庫
dart:io
文件讀寫,IO相關(guān)
dart:math
數(shù)字常量以及函數(shù),隨機(jī)算法等
dart:svg
事件和動畫矢量圖支持
綜上述所說要想學(xué)Flutter,先學(xué)Dart!關(guān)于Flutter下篇我會講到。為什么離不開dart!
有關(guān)更多面經(jīng)、核心技術(shù)筆記;自己也是從事Android開發(fā)5年有余了;整理了一些Android開發(fā)技術(shù)核心筆記和面經(jīng)題綱, 如有需要的同學(xué)請私信我回復(fù)“核心筆記”或“面試”領(lǐng)??!
分享文章:flutter編碼,flutterd
轉(zhuǎn)載來源:http://fisionsoft.com.cn/article/dsiipdi.html