日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RK3576 Android15 框架擴(kuò)展 — RkAi 數(shù)據(jù)流實(shí)戰(zhàn)篇

jf_44130326 ? 來源:Linux1024 ? 作者:Linux1024 ? 2026-05-14 11:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在上一篇《RkAi架構(gòu)篇》中,我們搭建了RkAi子系統(tǒng)的整體框架:Binder Service注冊(cè)、AIDL接口設(shè)計(jì)、客戶端API封裝。

本篇我們來追蹤兩條完整的數(shù)據(jù)流

?ASR上行:麥克風(fēng)采集的音頻數(shù)據(jù)→ AudioFlinger → JNI → Java服務(wù)端→ App回調(diào)

?LLM下行:App發(fā)送的文本消息→ Binder →服務(wù)端廣播→各監(jiān)聽器

并深入分析JNI層的實(shí)現(xiàn)細(xì)節(jié)、線程模型、以及性能瓶頸。

思維導(dǎo)圖

wKgZO2oFRmmACK4MAAFnTr6v7DU409.png

1.前置知識(shí)

wKgZO2oFRmmAFYACAABu7g18XaA811.png

1.1 Android音頻系統(tǒng)概覽

Android音頻系統(tǒng)的核心構(gòu)件:

?AudioFlinger:音頻系統(tǒng)的服務(wù)端,管理音頻輸入輸出流

?AudioSystem:封裝AudioFlinger的客戶端API,包括回調(diào)注冊(cè)

?BnRkAiCallback:RK自定義的Binder回調(diào)接口,用于從音頻HAL實(shí)時(shí)獲取語音數(shù)據(jù)

1.2 JNI的JNI_OnLoad機(jī)制

當(dāng)Java代碼調(diào)用System.loadLibrary()時(shí),Native庫的JNI_OnLoad()會(huì)被自動(dòng)調(diào)用。該函數(shù)有兩個(gè)職責(zé):

1.通過RegisterNatives()注冊(cè)Java native方法的C實(shí)現(xiàn)

2.緩存jmethodID/jfieldID,避免運(yùn)行時(shí)重復(fù)查找

// onload.cppextern"C"jintJNI_OnLoad(JavaVM* vm,void*) { register_com_android_server_RkAiManagerService(env); register_com_android_server_rkdisplay_RkDisplayModes(env); returnJNI_VERSION_1_4;}

2. ASR上行數(shù)據(jù)路徑(Native → Java → App)

這是RkAi當(dāng)前唯一激活的通路。麥克風(fēng)采集到的音頻數(shù)據(jù)經(jīng)過層層傳遞,最終到達(dá)應(yīng)用層的OnRkAiListener。

2.1完整路徑圖

wKgZO2oFRmmAemBUAAD4nlhd9_4547.png

2.2第①步:音頻采集與回調(diào)注冊(cè)

RkAi服務(wù)啟動(dòng)時(shí),nativeInit(true)做了兩件事:

// com_android_server_RkAiManagerService.cppstaticintnativeInit(JNIEnv* env, jobject obj, jboolean supportAsr){ if(supportAsr) {    mRkAiAsrCallback = sp::make();    AudioSystem::setRkAiCallback(mRkAiAsrCallback);  } return1;}

關(guān)鍵點(diǎn):

?JRkAiAsrCallback繼承自BnRkAiCallback(Android Binder框架的Native端實(shí)現(xiàn))

?通過AudioSystem::setRkAiCallback()注冊(cè)到AudioFlinger

?AudioFlinger在有音頻輸入時(shí),回調(diào)onAsrBuffer()

2.3第②步:JNI回調(diào)與類型轉(zhuǎn)換

這是最核心的C++代碼:

// JRkAiAsrCallback 的構(gòu)造函數(shù)JRkAiAsrCallback() {  env = AndroidRuntime::getJNIEnv();  clazz = env->FindClass("com/android/server/RkAiManagerService");}// onAsrBuffer 回調(diào)binder::StatusonAsrBuffer(conststd::vector& buffer,int32_tlen)override{  JNIEnv* env = AndroidRuntime::getJNIEnv();  jshortArray jArray = env->NewShortArray(len);  jshort *jBuffer =newjshort[len]; if(jArray !=NULL&& jBuffer !=NULL) {   // 逐元素拷貝:vector → short[]   for(inti =0; i < len; ++i) {? ? ? ? ? ? jBuffer[i] =?static_cast(buffer[i]);    }    env->SetShortArrayRegion(jArray,0, len, jBuffer);    jint jLen =static_cast(len);   // 調(diào)用 Java 靜態(tài)方法    env->CallStaticVoidMethod(clazz, gClassInfo.asrBufferFromNative, jArray, jLen);    env->DeleteLocalRef(jArray);  } delete[] jBuffer; returnbinder::ok();}

值得注意的設(shè)計(jì)細(xì)節(jié):

1.類型不匹配— AudioFlinger送出vector(32位),但Java側(cè)期望short[](16位)。JNI層做了int → short的逐元素截?cái)噢D(zhuǎn)換。這暗示音頻數(shù)據(jù)實(shí)際使用的就是16bit采樣(標(biāo)準(zhǔn)PCM 16bit格式),用vector是AudioFlinger回調(diào)接口的歷史設(shè)計(jì)。

2.手動(dòng)分配臨時(shí)緩沖區(qū)—new jshort[len]+SetShortArrayRegion的組合,沒有直接用NewShortArray的原生指針寫入。這里有一次額外的內(nèi)存拷貝(jBuffer→ JVM管理的jshortArray)。

3.JNIEnv線程問題—構(gòu)造函數(shù)中獲取的env在回調(diào)線程中可能無效,所以onAsrBuffer中每次都重新調(diào)用AndroidRuntime::getJNIEnv()獲取當(dāng)前線程的JNIEnv。這是一種防御性寫法。

4.static jmethodID緩存—gClassInfo.asrBufferFromNative在JNI_OnLoad時(shí)通過GetStaticMethodID緩存下來,避免了每次回調(diào)時(shí)重復(fù)查找。

2.4第③步:Java靜態(tài)方法asrBufferFromNative

// RkAiManagerService.javaprivatestaticvoidasrBufferFromNative(finalshort[] buffer,finalintlen){ Bundlebundle=newBundle();  bundle.putShortArray(RkAiManager.EXTRA_ASR_BUFFER, buffer);  bundle.putInt(RkAiManager.EXTRA_ASR_BUFFER_LEN, len);  sendRkAiMsg(newRkAiData(RkAiManager.RKAI_TYPE_ASR, bundle));}

這個(gè)方法有幾個(gè)重要設(shè)計(jì):

?static方法—因?yàn)閺腏NI只能直接調(diào)用靜態(tài)方法,無需對(duì)象實(shí)例

?Bundle封裝—用Bundle作為靈活的數(shù)據(jù)容器,可以方便地?cái)U(kuò)展鍵值對(duì)

?final參數(shù)— final阻止方法將buffer重新指向另一個(gè)數(shù)組(不能buffer = new short[...]),加強(qiáng)代碼安全

2.5第④步:RemoteCallbackList廣播

// RkAiManagerService.javaprivatestaticvoidsendRkAiMsg(RkAiData data){ finalintnum=mListeners.beginBroadcast(); try{   for(inti=0; i < num; i++) {? ? ? ? ? ??try?{? ? ? ? ? ? ? ? mListeners.getBroadcastItem(i).dispatchRkAiListener(data);? ? ? ? ? ? }?catch?(Exception e) {? ? ? ? ? ? ? ? e.printStackTrace();? ? ? ? ? ? }? ? ? ? }? ? }?finally?{? ? ? ? mListeners.finishBroadcast();? ? }}

RemoteCallbackList是Android系統(tǒng)服務(wù)中管理跨進(jìn)程回調(diào)的標(biāo)準(zhǔn)方式:

?beginBroadcast()—鎖定內(nèi)部列表,獲取當(dāng)前注冊(cè)的listener快照

?getBroadcastItem(i)—獲取第i個(gè)listener的Binder代理

?finishBroadcast()—解鎖

廣播期間如果某個(gè)listener的進(jìn)程已死亡,調(diào)用dispatchRkAiListener()會(huì)拋出DeadObjectException,被catch塊捕獲后繼續(xù)廣播剩下listener。

2.6第⑤步:回到App主線程

IOnRkAiListener接口聲明為oneway,所以服務(wù)端的廣播調(diào)用是非阻塞的。在App端,Binder回調(diào)到達(dá)的線程是Binder線程池中的線程,不能直接做UI操作。

oneway關(guān)鍵字意味著:Binder調(diào)用在事務(wù)發(fā)送后立即返回,不等待服務(wù)端執(zhí)行完畢;不保證發(fā)送順序與服務(wù)端處理順序一致;服務(wù)端的DeadObjectException(進(jìn)程死亡)無法被oneway調(diào)用檢測(cè)到(Binder驅(qū)動(dòng)不會(huì)回復(fù)錯(cuò)誤)。

// RkAiManager.java — mServiceListenerprivatefinalIOnRkAiListener.StubmServiceListener=newIOnRkAiListener.Stub() { @Override publicvoiddispatchRkAiListener(RkAiData data){    mHandler.post(() -> {      reportRkAiMsg(data);    });  }};

?mHandler.post()—通過Handler將reportRkAiMsg()投遞到創(chuàng)建RkAiManager時(shí)所在的線程(通常是App的主線程)

?這意味著App不需要額外做線程同步——回調(diào)的最終分發(fā)總在主線程

2.7第⑥步:reportRkAiMsg分發(fā)

// RkAiManager.javavoidreportRkAiMsg(RkAiData data){  Object[] listeners; synchronized(mListeners) {   finalintN=mListeners.size();   if(N <=?0)?return;? ? ? ? listeners = mListeners.toArray(); ?// 快照,避免遍歷時(shí)被修改? ? }? ??for?(int?i?=?0; i < listeners.length; i++) {? ? ? ??switch?(data.getType()) {? ? ? ? ? ??case?RKAI_TYPE_ASR: {? ? ? ? ? ? ? ??Bundle?info?=?data.getInfo();? ? ? ? ? ? ? ??if?(null?!= info) {? ? ? ? ? ? ? ? ? ??short[] buffer = info.getShortArray(EXTRA_ASR_BUFFER);? ? ? ? ? ? ? ? ? ??int?len?=?info.getInt(EXTRA_ASR_BUFFER_LEN,?0);? ? ? ? ? ? ? ? ? ? ((OnRkAiListener)listeners[i]).onRkAiAsrBuffer(buffer, len);? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ??break;? ? ? ? ? ? }? ? ? ? ? ??// LLM 類型同理處理? ? ? ? }? ? }}

這里用了Copy-on-Write模式:在synchronized塊內(nèi)調(diào)用toArray()拿到監(jiān)聽器列表的快照,然后在鎖外出逐個(gè)調(diào)用回調(diào)。這樣:

?添加/刪除listener的操作與回調(diào)互不干擾

?即使遍歷過程中有l(wèi)istener被移除,已拿到的快照依然有效

3. LLM下行數(shù)據(jù)路徑(App → Service →廣播)

ASR是Native → Java的上行方向,LLM則是App → Service的下行方向。不過當(dāng)前SUPPORT_RKAI_LLM = false,所以這條路徑處于"有代碼但未啟用"狀態(tài)。

3.1路徑圖

wKgZO2oFRmqAFpMeAADuOMRSZUo746.png

3.2 LLM消息的獨(dú)特之處

與ASR不同,LLM消息的源是App本身:

// RkAiManager.javapublicvoidsendRkAiLlmMsg(StringselectText,StringcontextText) { Bundlebundle =newBundle();  bundle.putString(EXTRA_SELECT_TEXT, selectText);  bundle.putString(EXTRA_CONTEXT_TEXT, contextText); RkAiDatadata =newRkAiData(RKAI_TYPE_LLM, bundle);  mService.sendRkAiMsg(data, ...);}

當(dāng)前SUPPORT_RKAI_LLM = false,但這套代碼的架構(gòu)思路是:

1.App通過Binder把選中文本上下文文本發(fā)給服務(wù)端

2.服務(wù)端廣播給所有注冊(cè)的listener

3.監(jiān)聽器(比如另一個(gè)App進(jìn)程的后臺(tái)服務(wù))解析文本,調(diào)用LLM推理

4.推理結(jié)果再通過另一個(gè)通道返回

這種"發(fā)一條消息播報(bào)給所有人"的模式與ASR的"單路采集多路分發(fā)"本質(zhì)上是相同的。

4.線程模型深度分析

理解RkAi的線程模型,對(duì)排查音頻延遲、卡頓、ANR問題至關(guān)重要。

wKgZO2oFRmqAY45rAABewB-xTwg651.png

4.1各線程的角色

線程 所屬進(jìn)程 類型 關(guān)鍵特征
AudioFlinger線程 system_server Native回調(diào) 實(shí)時(shí)優(yōu)先級(jí),不可被Java調(diào)用阻塞
JNI回調(diào)體 system_server Native執(zhí)行 在AudioFlinger回調(diào)上下文中運(yùn)行
Binder線程池 system_server Java執(zhí)行 beginBroadcast+Binder IPC
App Binder線程 App Java Binder回調(diào) 處理dispatchRkAiListener
App Main Thread App Handler Looper 最終回調(diào)觸發(fā)處

4.2 "切線程"的設(shè)計(jì)考量

從Native到App回調(diào),經(jīng)歷了兩次線程切換:

AudioFlinger線程 → (1) JNI 回調(diào) → (2) Binder IPC → (3) Handler Post

為什么不在JNI直接廣播?
因?yàn)镽emoteCallbackList的操作(beginBroadcast)需要在Java線程上下文中執(zhí)行,且Binder調(diào)用本身就需要線程池。JNI層只做類型轉(zhuǎn)換和Java靜態(tài)方法調(diào)用,是合理的設(shè)計(jì)選擇。

為什么App端要用Handler?
因?yàn)镮OnRkAiListener雖然是oneway(非阻塞),但回調(diào)仍然在Binder線程池中執(zhí)行。如果App直接在Binder回調(diào)中處理音頻數(shù)據(jù):

?會(huì)占用Binder線程,影響跨進(jìn)程通信的吞吐

?Binder線程不能進(jìn)行UI操作

?線程不匹配可能導(dǎo)致App內(nèi)部死鎖

mHandler.post()保證了App的回調(diào)總在預(yù)期線程(主線程或自定義Looper線程)中執(zhí)行。

5.性能分析與優(yōu)化思考

5.1性能熱點(diǎn)

wKgZO2oFRmqAH0buAABYW_ueaGQ473.png

每次回調(diào)涉及的主要開銷(按從左到右):

操作 開銷等級(jí) 說明
vector構(gòu)造 AudioFlinger為每次回調(diào)構(gòu)造新的vector
int→short逐元素 O(n)逐元素轉(zhuǎn)換,可優(yōu)化為批量轉(zhuǎn)換
NewShortArray JVM堆分配
SetShortArrayRegion native → JVM內(nèi)存拷貝
Bundle.putShortArray Bundle內(nèi)部序列化/反序列化
beginBroadcast/finishBroadcast 內(nèi)部鎖+列表遍歷
Binder oneway傳輸 Parcel序列化RkAiData

5.2可優(yōu)化點(diǎn)

1.消除逐元素拷貝
當(dāng)前代碼for (int i=0; i

2.流控機(jī)制缺失
當(dāng)前onAsrBuffer不做任何流控——AudioFlinger以多快頻率回調(diào),JNI就以多快頻率廣播。如果App端的listener消費(fèi)速度跟不上,沒有背壓機(jī)制,可能導(dǎo)致App側(cè)的Handler消息隊(duì)列堆積。
可以考慮的方案:在JNI層實(shí)現(xiàn)一個(gè)環(huán)形緩沖區(qū)+降采樣邏輯。

3. Binder死亡重連缺失
如果系統(tǒng)服務(wù)重啟(比如SystemServer crash),RkAiManager持有的mServiceBinder代理會(huì)變成死對(duì)象。當(dāng)前代碼沒有重試或重連機(jī)制,所有后續(xù)API調(diào)用會(huì)拋出RemoteException。

4. AudioSystem回調(diào)線程優(yōu)先級(jí)
如果onAsrBuffer中執(zhí)行了太重的操作(比如Java靜態(tài)方法調(diào)用中的Bundle分配),可能拖慢AudioFlinger的處理線程。建議在JNI層就做一次線程切換,用獨(dú)立的Native線程接收回調(diào),再異步轉(zhuǎn)發(fā)到Java層。

5.3內(nèi)存開銷

為分析每次ASR回調(diào)的內(nèi)存分配路徑:

AudioFlinger:  vector (4*lenbytes)JNI:       jshort[]  (2*lenbytes, JVM heap)         + jBuffer (2*lenbytes, native heap, 臨時(shí))Java:      Bundle    (內(nèi)部數(shù)組)Binder:     Parcel    (序列化后的數(shù)據(jù))App:       Handler msg + dispatch

實(shí)際上每次回調(diào)會(huì)有4-5倍于原始數(shù)據(jù)量的臨時(shí)內(nèi)存分配。如果ASR頻率很高(如10ms一次),這些臨時(shí)對(duì)象的GC壓力不小。

6.調(diào)試方法

6.1 ASR路徑驗(yàn)證

# 開啟所有 RkAi 相關(guān)日志adb logcat -s RkAiManager RkAiManagerService RkAiManagerNative# 確認(rèn)服務(wù)已注冊(cè)adb shell service check rkai_management# 查看 ASR 數(shù)據(jù)流# 關(guān)鍵詞:asrBufferFromNative — JNI 到 Java 的入口#     sendRkAiMsg — 廣播#     dispatchRkAiListener — 回調(diào)到 App# 監(jiān)測(cè) ASR 回調(diào)頻率adb logcat -s RkAiManagerNative | grep -o"onAsrBuffer"|wc-l

6.2 Native層調(diào)試

# JNI 回調(diào)是否生效# 正常 logcat 應(yīng)有:# RkAiManagerNative: nativeInit supportAsr=1# 如果 ASR 回調(diào)沒到 Java,檢查:# 1. AudioSystem::setRkAiCallback 是否成功# 2. BnRkAiCallback 的 onAsrBuffer 是否命中

6.3常見問題排查

癥狀 可能原因 排查方法
服務(wù)注冊(cè)失敗 feature未使能 adb shell pm list features | grep rockchip.software.ai
ASR回調(diào)無數(shù)據(jù) AudioFlinger未觸發(fā)回調(diào) logcatRkAiManagerNative看onAsrBuffer打印
App收不到回調(diào) Binder代理失效/ Listener未注冊(cè) 檢查addListener返回值
音頻延遲大 JNI層逐元素拷貝/ Bundle分配 在onAsrBuffer打時(shí)間戳
服務(wù)端ANR Binder廣播被慢listener拖住 oneway回調(diào),理論上不應(yīng)發(fā)生

7.總結(jié)

通過本篇的詳細(xì)追蹤,可以看到RkAi子系統(tǒng)在兩個(gè)方向上的數(shù)據(jù)流:

方向 路徑 當(dāng)前狀態(tài)
ASR上行 AudioFlinger → JNI → Service → App 啟用
LLM下行 App → Service →廣播監(jiān)聽器 已實(shí)現(xiàn)但編譯關(guān)閉

完整的調(diào)用鏈及每層的職責(zé):

wKgZO2oFRmqAYNdQAABZ5U5gnBM805.png

改進(jìn)空間總結(jié):

1.JNI層的int→short逐元素拷貝可以優(yōu)化

2.缺少ASR數(shù)據(jù)的流控/背壓機(jī)制

3.RkAiManager缺少Binder死亡重連

4.高頻ASR回調(diào)下的GC壓力需要評(píng)估

5.服務(wù)端不對(duì)callingPackage做權(quán)限校驗(yàn)

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    4041

    瀏覽量

    134683
  • 數(shù)據(jù)流
    +關(guān)注

    關(guān)注

    0

    文章

    131

    瀏覽量

    16578
  • rk3576
    +關(guān)注

    關(guān)注

    1

    文章

    310

    瀏覽量

    1704
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    RK3576 Android15 框架擴(kuò)展RkAi 架構(gòu)

    在?Rockchip RK3576?平臺(tái)的?Android?定制框架中,RkAi?子系統(tǒng)是核心的?AI?能力擴(kuò)展模塊。本文將從架構(gòu)設(shè)計(jì)、文件
    的頭像 發(fā)表于 05-13 08:09 ?381次閱讀
    <b class='flag-5'>RK3576</b> <b class='flag-5'>Android15</b> <b class='flag-5'>框架</b><b class='flag-5'>擴(kuò)展</b>— <b class='flag-5'>RkAi</b> 架構(gòu)<b class='flag-5'>篇</b>

    RK3576 Android15音頻開發(fā)必看:alsa_route核心文件解析與修改場(chǎng)景

    ——alsa_route(alsa_route.h/alsa_route.c)。 作為連接Android上層音頻框架與底層ALSA驅(qū)動(dòng)的“橋梁”,alsa_route是RK3576 Andro
    的頭像 發(fā)表于 02-26 08:08 ?443次閱讀
    <b class='flag-5'>RK3576</b> <b class='flag-5'>Android15</b>音頻開發(fā)必看:alsa_route核心文件解析與修改場(chǎng)景

    RK3576平臺(tái)Android HAL層故障排查:從lshal命令看透問題本質(zhì)

    RK3576 作為瑞芯微主流的中高端芯片,其 HAL 層基于 HIDL ( Android 硬件接口定義語言)實(shí)現(xiàn),排查這類問題的核心工具就是 lshal —— 一個(gè)能直接暴露 HIDL 服務(wù)運(yùn)行狀態(tài)的命令
    的頭像 發(fā)表于 02-06 07:12 ?686次閱讀
    <b class='flag-5'>RK3576</b>平臺(tái)<b class='flag-5'>Android</b> HAL層故障排查:從lshal命令看透問題本質(zhì)

    基于rk3576開發(fā)debian、ubuntu、android

    RK3576芯片是一款功能強(qiáng)大、全面支持多媒體處理、高速連接和外部擴(kuò)展的嵌入式處理器。它適用于多種應(yīng)用場(chǎng)景,如高清視頻播放、嵌入式開發(fā)、智能家居、汽車電子等。
    的頭像 發(fā)表于 01-30 17:53 ?2946次閱讀
    基于<b class='flag-5'>rk3576</b>開發(fā)debian、ubuntu、<b class='flag-5'>android</b>

    硬核進(jìn)階:RK3576 Android15?驅(qū)動(dòng)與系統(tǒng)開發(fā)實(shí)戰(zhàn)指南

    android15,想與大家探討更多,不僅僅是驅(qū)動(dòng),更包含android其他方面。 各位嵌入式與Android開發(fā)的朋友們,我們的? RK3576
    的頭像 發(fā)表于 01-26 22:29 ?883次閱讀
    硬核進(jìn)階:<b class='flag-5'>RK3576</b> <b class='flag-5'>Android15</b>?驅(qū)動(dòng)與系統(tǒng)開發(fā)<b class='flag-5'>實(shí)戰(zhàn)</b>指南

    RK3576輕松搭建RTMP視頻推,基于FFmpeg+Nginx協(xié)同

    瑞芯微RK3576芯片平臺(tái)實(shí)現(xiàn)多路RTMP視頻推,基于觸覺智能RK3576開發(fā)板PurplePiOH2演示。RTMP視頻推RTMP視頻推
    的頭像 發(fā)表于 12-11 17:17 ?1338次閱讀
    <b class='flag-5'>RK3576</b>輕松搭建RTMP視頻推<b class='flag-5'>流</b>,基于FFmpeg+Nginx協(xié)同

    迅為如何在RK3576上部署YOLOv5;基于RK3576構(gòu)建智能門禁系統(tǒng)

    迅為如何在RK3576開發(fā)板上部署YOLOv5;基于RK3576構(gòu)建智能門禁系統(tǒng)
    的頭像 發(fā)表于 11-25 14:06 ?2047次閱讀
    迅為如何在<b class='flag-5'>RK3576</b>上部署YOLOv5;基于<b class='flag-5'>RK3576</b>構(gòu)建智能門禁系統(tǒng)

    【作品合集】米爾RK3576開發(fā)板測(cè)評(píng)

    米爾RK3576開發(fā)板測(cè)評(píng)作品合集 產(chǎn)品介紹: RK3576 是瑞芯微一款面向AI市場(chǎng)推出的高性能處理器,它配備了四核Cortex-A72和四 核Cortex-A53 的 CPU,集成了6TOPS
    發(fā)表于 09-11 10:19

    瑞芯微RK3576平臺(tái)FFmpeg硬件編解碼移植及性能測(cè)試實(shí)戰(zhàn)攻略 觸覺智能RK3576開發(fā)板演示

    本文介紹瑞芯微RK3576平臺(tái),F(xiàn)Fmpeg硬件編解碼移植及性能測(cè)試方法。演示設(shè)備:觸覺智能RK3576開發(fā)板FFmpeg簡(jiǎn)介與實(shí)測(cè)數(shù)據(jù)FFmpeg簡(jiǎn)介FFmpeg是一套多媒體框架,能
    的頭像 發(fā)表于 09-08 13:58 ?1602次閱讀
    瑞芯微<b class='flag-5'>RK3576</b>平臺(tái)FFmpeg硬件編解碼移植及性能測(cè)試<b class='flag-5'>實(shí)戰(zhàn)</b>攻略 觸覺智能<b class='flag-5'>RK3576</b>開發(fā)板演示

    RK3576助力智慧安防:8路高清采集與AI識(shí)別

    全屏/分屏切換,4G、Wi-Fi、雙千兆以太網(wǎng)實(shí)現(xiàn)實(shí)時(shí)推。3. 米爾RK3576核心板平臺(tái)優(yōu)勢(shì)強(qiáng)大的算力:6TOPS NPU高性能:8路視頻+AI識(shí)別同時(shí)運(yùn)行,CPU占用率僅34%低功耗:無風(fēng)
    發(fā)表于 08-22 17:41

    瑞芯微RK3576RK3576S有什么區(qū)別,性能參數(shù)配置與型號(hào)差異解析

    瑞芯微第二代8nm高性能AIOT平臺(tái)RK3576家族再添新成員-RK3576S,先說結(jié)論:相較主型號(hào)的RK3576/RK3576J,性能略有縮減,而功耗有所降低。主要應(yīng)用于商顯終端、智
    的頭像 發(fā)表于 08-14 23:57 ?2842次閱讀
    瑞芯微<b class='flag-5'>RK3576</b>與<b class='flag-5'>RK3576</b>S有什么區(qū)別,性能參數(shù)配置與型號(hào)差異解析

    RK這2款旗艦芯片RK3588 PK RK3576,誰是最優(yōu)選

    架構(gòu)來看,RK3588 的 Cortex - A75 和 Cortex - A55 核心在緩存配置上更為先進(jìn),尤其是 L3 緩存的共享機(jī)制可能使其在多核心協(xié)作和數(shù)據(jù)讀取方面具有優(yōu)勢(shì)。RK3576
    發(fā)表于 07-10 18:24

    Mpp支持RK3576

    想問下,https://github.com/rockchip-linux/mpp這里面支持RK3576么,看介紹沒有提到說支持RK3576 目前是買了個(gè)rk3576的機(jī)頂盒,搭載了安卓14,想做安卓視頻硬解。
    發(fā)表于 06-13 15:35

    RK3576 vs RK3588:為何越來越多的開發(fā)者轉(zhuǎn)向RK3576?

    瑞芯微(Rockchip)最新發(fā)布的 RK3576 一經(jīng)推出,就吸引了大量原本關(guān)注 RK3588 的開發(fā)者。RK3588 作為旗艦級(jí)芯片,性能固然強(qiáng)大,但 RK3576 憑借其超高的能
    發(fā)表于 05-30 08:46

    RK3576 Android 14.0 SDK開發(fā)指南(第一集)

    RK3576 Android 14.0 SDK代碼編譯 SDK下載到本地后大概70多個(gè)G 下載后要做個(gè)校驗(yàn) 解壓后內(nèi)核源碼 kernel代碼路徑說明 Android14支持6.1 版本
    發(fā)表于 05-20 08:43
    丹凤县| 奉化市| 甘孜| 玉田县| 武安市| 托克托县| 慈利县| 泾川县| 山西省| 泊头市| 阜城县| 浑源县| 马鞍山市| 吉木乃县| 合江县| 天峻县| 新丰县| 宜良县| 迭部县| 镇巴县| 盐边县| 清水县| 淮阳县| 赤水市| 偏关县| 马山县| 内丘县| 普陀区| 平乐县| 万盛区| 施甸县| 义乌市| 雷山县| 泸西县| 都江堰市| 平舆县| 武乡县| 蒙山县| 永仁县| 花莲市| 乐业县|