91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RK Android平臺音頻調試指南:從基礎到實戰(zhàn),解決多設備輸出、聲卡異常等核心問題

jf_44130326 ? 來源:Linux1024 ? 2026-02-06 16:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Android開發(fā)中,音頻模塊的調試往往是老大難”——多聲卡無法區(qū)分、多設備同時輸出沒聲音、HDMI錄音崩潰這些問題不僅影響用戶體驗,還會消耗大量開發(fā)時間。

瑞芯微Rockchip)針對RK平臺推出的MultiAudio方案,專門解決Android原生音頻框架的局限,同時提供了一套清晰的調試方法論。今天這篇文章,就從實戰(zhàn)角度出發(fā),帶大家搞定RK Android平臺的音頻調試,覆蓋基礎操作、常見Bug解決、多設備控制等核心場景。

wKgZPGkaixiAEw8YAADpfPmKUJI793.png

一、先搞懂:Android原生音頻的痛點MultiAudio解決方案

在聊調試前,我們得先明白為什么需要調試”——Android原生音頻框架存在不少局限,這也是RK MultiAudio方案的出發(fā)點:

1.多聲卡認不出、用不了:即使設備支持多個聲卡(比如雙HDMI、SPDIF),原生系統(tǒng)會按AudioPolicy優(yōu)先級選最高的,無法讓不同聲卡同時輸出不同聲音;多個同類型聲卡(如雙HDMI)更是無法區(qū)分。

2.多設備錄音需適配Android 12雖支持多設備同時錄音,但原生代碼默認不支持,需要廠商針對性開發(fā)。

3.APP音頻沖突:系統(tǒng)音頻焦點機制會導致多屏同時播放視頻時出現(xiàn)暫停,影響多場景使用(如會議投屏+本地播放)。

RK MultiAudio方案正好補上這些短板,核心能力包括:

?HDMI/DP插拔識別+聲音分離(HDMI_0/HDMI_1、DP_0/DP_1獨立輸出);

?第三方APP按包名指定聲卡(如MX Player走揚聲器、RockVideoPlayerHDMI);

?JAVA層通過接口直接控制聲卡;

?HDMI IN同時錄音(HDMIIN_0/HDMIIN_1獨立錄音);

?多設備音量同步調節(jié)與保存。

二、基礎調試:先搞定聲卡識別驅動驗證

調試的第一步,是確認硬件通路是否正常”——也就是聲卡是否被正確識別、驅動是否能工作。這兩步操作簡單,但卻是排查問題的基礎。

1.查看聲卡:確認設備是否被系統(tǒng)識別

通過adb執(zhí)行命令,查看當前系統(tǒng)已注冊的聲卡:

cat/proc/asound/cards

RK3588為例,正常輸出會類似這樣(能看到揚聲器、HDMI IN、HDMI 0/1等聲卡):

0[rockchipes8388 ]: rockchip-es8388 - rockchip-es8388          rockchip-es83881[rockchiphdmiin ]: rockchip_hdmiin - rockchip,hdmiin          rockchip,hdmiin2[rockchiphdmi0 ]: rockchip-hdmi0 - rockchip-hdmi0          rockchip-hdmi03[rockchiphdmi1 ]: rockchip-hdmi1 - rockchip-hdmi1          rockchip-hdmi1

如果某塊聲卡沒出現(xiàn)(比如HDMI 0缺失),先排查硬件連接(如HDMI線是否插好),再檢查DTS配置是否正確。

2.測試驅動:驗證聲卡能否正常出聲

確認聲卡識別后,用tinyplay工具測試驅動是否正常(需系統(tǒng)集成tinyalsa工具集)。

以測試HDMI 0聲卡(對應上述輸出中的索引“2”)為例:

1.準備一個WAV格式的音頻文件(如test.wav),推到設備的/data目錄;

2.執(zhí)行命令播放:

tinyplay/data/test.wav -D2-d0

?-D:指定聲卡索引(這里“2”對應rockchiphdmi0);

?-d:指定設備編號(通常為0)。

如果能正常聽到聲音,說明HDMI 0聲卡驅動沒問題;若沒聲音,優(yōu)先排查驅動配置(如DTS中聲卡節(jié)點是否啟用)。

三、實戰(zhàn):5大常見音頻Bug及解決方案

調試中最頭疼的是明明配置了,卻出問題”——我們整理了RK平臺最常遇到的5類音頻Bug,附詳細解決步驟。

1.問題1:更新代碼后,HDMI突然沒聲音(之前正常)

?現(xiàn)象:代碼同步到最新后,HDMI無音頻輸出,查看聲卡卻能識別到。

?原因:新框架支持多HDMI識別,若系統(tǒng)只有1HDMI,上層會默認調用“hdmi0”聲卡,但DTS中聲卡名可能配置成了“hdmi1”,導致匹配失敗。

?解決:修改DTS文件,將聲卡名改為“rockchip-hdmi0”

# 找到 DTS 中 HDMI 聲卡節(jié)點rockchiphdmi1: rockchip-hdmi1 {-  rockchip,card-name ="rockchip-hdmi1"+  rockchip,card-name ="rockchip-hdmi0"};

2.問題2UBootLogo后,HDMI沒聲音(插拔線后恢復)

?現(xiàn)象:開啟UBoot Logo顯示后,HDMI開機無聲音,手動插拔一次HDMI線才正常。

?原因HDMIextcon(外部連接狀態(tài)控制器)狀態(tài)更新不及時,系統(tǒng)誤以為HDMI未連接。

?解決:修改DRM驅動代碼,強制同步extcon狀態(tài):

drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c中添加狀態(tài)同步邏輯:

mutex_lock(&hdmi->mutex);if(result != hdmi->last_connector_result) { dev_dbg(hdmi->dev,"read_hpd result: %d", result); // 同步 extcon 狀態(tài) extcon_set_state_sync(hdmi->extcon, EXTCON_DISP_HDMI, result == connector_status_connected); handle_plugged_change(hdmi, result == connector_status_connected);  hdmi->last_connector_result = result;}mutex_unlock(&hdmi->mutex);

3.問題3SPDIF與其他聲卡同時出聲,聲音斷斷續(xù)續(xù)

?現(xiàn)象SPDIF(光纖/同軸)與揚聲器/ HDMI同時播放時,音頻卡頓、斷連。

?原因1DMA音頻流位置計算錯誤;2)聲卡MCLK配置不合理。

?解決:兩步操作:

a.集成3個關鍵Kernel補?。ㄐ迯?/span>DMAPM問題):

修復DMA流位置計算:ALSA: pcm_dmaengine: always get stream position from DMA driver

修復DMA runtime PM失衡:dmaengine: pl330: Fix unbalanced runtime PM

提升DMA循環(huán)傳輸效率:dmaengine: pl330: Improve dma cyclic transfers efficiency

a.修改DTSSPDIF聲卡節(jié)點,添加MCLK配置:

spdif_tx0_sound: spdif-tx0-sound {  status ="okay";  compatible ="simple-audio-card";+  simple-audio-card,mclk-fs = <128>;// 添加這行  simple-audio-card,name ="rockchip,spdif-tx0"; // 其他配置...};

4.問題4HDMI IN錄音時,偶爾出現(xiàn)Audio服務崩潰

?現(xiàn)象:用HDMI IN錄制外部音頻(如機頂盒信號)時,Audio服務突然崩潰,日志提示“TimeCheck超時。

?原因HDMI IN錄音的等待時間過短,導致超時觸發(fā)服務重啟。

?解決:修改I2S-TDM驅動,延長錄音等待時間:

sound/soc/rockchip/rockchip_i2s_tdm.c中添加超時配置:

staticintrockchip_i2s_tdm_trigger(structsnd_pcm_substream *substream,intcmd){ // 其他邏輯... break;+ // 針對錄音流,延長等待時間到 500ms+ if(substream->stream == SNDRV_PCM_STREAM_CAPTURE) {+    substream->wait_time = msecs_to_jiffies(500);+  } returnret;}

5.問題5:更新代碼后,聲卡完全沒聲音(優(yōu)先級沖突)

?現(xiàn)象:同步代碼后,所有聲卡都沒聲音,查看proc/asound/cards能識別到聲卡。

?原因RK默認代碼基于多聲卡設備(如RK3588 EVB1支持4路聲卡),優(yōu)先級為HDMI0 > HDMI1 > DP0 > DP1;若實際設備只有1HDMI1,系統(tǒng)仍優(yōu)先調用HDMI0(但無對應聲卡),導致所有聲音無輸出。

?解決:修改WiredAccessoryManager.java,屏蔽HDMI0的優(yōu)先級判斷:

# 文件路徑:frameworks/base/services/core/java/com/android/server/WiredAccessoryManager.javaelseif(headset==BIT_HDMI_AUDIO) {- Slog.d(TAG,"hdmi_0 plug");- outDevice=AudioManager.DEVICE_OUT_HDMI;+ // 屏蔽 HDMI0 識別,避免優(yōu)先級沖突+ // Slog.d(TAG, "hdmi_0 plug");+ // outDevice = AudioManager.DEVICE_OUT_HDMI;}elseif(headset==BIT_HDMI_AUDIO_1) { Slog.d(TAG,"hdmi_1 plug");  outDevice=AudioManager.DEVICE_OUT_HDMI_1;

四、實用技巧:多設備輸出與HDMI IN錄音的調用方法

除了調試,掌握MultiAudio的核心調用方式,能讓開發(fā)更高效。

1.多設備輸出:指定聲卡的2種方式

1JAVA層通過AudioSessionId控制

MediaPlayer初始化時,通過setAudioSessionId指定聲卡,必須在setDataSource前調用

MediaPlayermp=newMediaPlayer();// 指定聲卡:PRIMARY(57)=揚聲器,HDMI0(65),DP0(73),HDMI1(81),DP1(89)mp.setAudioSessionId(65);// 聲音從 HDMI0 輸出mp.setDataSource("/data/test.mp4");mp.prepare();mp.start();

2)按APP包名綁定聲卡

適合需要固定APP輸出設備的場景(如會議軟件固定走HDMI),修改AudioTrack.cpp

#ifMultiAudioTestString8 appPackage =String8(mPackageName);// RockVideoPlayer 走 HDMI0,gallery3d 走 HDMI1,MX Player 走揚聲器if(strstr(appPackage.string(),"RockVideoPlayer")) {  sessionid = (audio_session_t)65;}elseif(strstr(appPackage.string(),"gallery3d")) {  sessionid = (audio_session_t)81;}elseif(strstr(appPackage.string(),"mxtech")) {// MX Player 包名含 mxtech  sessionid = (audio_session_t)57;}#endif

同時需要:

?打開MultiAudioTest宏(在frameworks/av/media/libaudioclient/include/media/AudioTrack.h中設為1);?解決音頻焦點沖突:在MediaFocusControl.java 中添加focusChangeHint=3,避免多APP同時播放時暫停。

2. HDMI IN錄音:調用HDMIIN音頻源

通過AudioRecord初始化時指定MediaRecorder.AudioSource.HDMIIN,即可錄制HDMI外部輸入的聲音:

// 參數(shù):音頻源(HDMIIN)、采樣率、聲道配置、格式、緩沖區(qū)大小AudioRecordaudioRecord=newAudioRecord(  MediaRecorder.AudioSource.HDMIIN, 44100,// 采樣率 44.1kHz  AudioFormat.CHANNEL_IN_STEREO,// 立體聲  AudioFormat.ENCODING_PCM_16BIT,// 16bit PCM 4096// 緩沖區(qū)大小);// 開始錄音audioRecord.startRecording();

五、擴展:用AudioPatch優(yōu)化TvInput音頻延時

如果開發(fā)TvInput相關功能(如電視信號輸入),可以用AudioPatch替代傳統(tǒng)的AudioStream,進一步降低音頻延時(但錄屏無法捕獲TvInput預覽聲音,需根據(jù)需求選擇)。

核心修改:在TvInputHardwareManager.java中屏蔽AudioStream調用,啟用AudioPatch

// 屏蔽原 AudioStream 邏輯// mAudioStream.start(6);// mAudioStream.stop();// 啟用 AudioPatchif(mAudioPatch !=null) {  mAudioManager.releaseAudioPatch(mAudioPatch);}// 創(chuàng)建 AudioPatch 連接 HDMI IN 音頻源mAudioManager.createAudioPatch(  audioPatchArray, newAudioPortConfig[] { sourceConfig }, newAudioPortConfig[] { sinkConfig });

六、總結與支持

RK Android平臺的音頻調試,核心是先確認基礎通路(聲卡+驅動),再定位上層邏輯(優(yōu)先級、狀態(tài)同步)MultiAudio方案不僅解決了原生框架的局限,其配套的調試方法也能覆蓋大部分場景。

希望這篇指南能幫你少踩坑,高效搞定音頻調試!如果覺得有用,歡迎點贊、轉發(fā),也歡迎在評論區(qū)分享你的調試經(jīng)驗~

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

    關注

    34

    文章

    1899

    瀏覽量

    160579
  • Android
    +關注

    關注

    12

    文章

    4026

    瀏覽量

    134009
  • 音頻
    +關注

    關注

    31

    文章

    3188

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何對基于RK3288平臺的Simple card聲卡進行調試

    基于RK3288平臺的Simple card聲卡該怎樣去添加呢?如何對基于RK3288平臺的Simple card
    發(fā)表于 03-03 08:17

    RK系列開發(fā)板音頻驅動適配指南(二)

    RK系列開發(fā)板音頻驅動適配指南(一)RK系列開發(fā)板音頻驅動適配指南(二)
    發(fā)表于 10-09 11:30

    一文搞定RK平臺Wi-Fi/BT調試配置問題解決全攻略

    在嵌入式 Linux 開發(fā)中,瑞芯微(Rockchip)平臺的 Wi-Fi 與藍牙調試是許多工程師的核心需求。無論是 RK3588、RK35
    的頭像 發(fā)表于 02-09 16:57 ?1333次閱讀
    一文搞定<b class='flag-5'>RK</b><b class='flag-5'>平臺</b>Wi-Fi/BT<b class='flag-5'>調試</b>!<b class='flag-5'>從</b>配置<b class='flag-5'>到</b>問題解決全攻略

    RK平臺聲卡添加與驅動調試指南

    在瑞芯微(RK平臺的嵌入式系統(tǒng)開發(fā)中,音頻功能的實現(xiàn)核心依賴于 Sound Card(聲卡)的正確配置與驅動
    的頭像 發(fā)表于 02-09 16:42 ?751次閱讀
    <b class='flag-5'>RK</b><b class='flag-5'>平臺</b>新<b class='flag-5'>聲卡</b>添加與驅動<b class='flag-5'>調試</b><b class='flag-5'>指南</b>

    一文吃透RK平臺OTA升級開發(fā):邏輯調試的完整指南

    在 Rockchip(簡稱 RKAndroid 平臺開發(fā)中,OTA(Over The Air)升級是實現(xiàn)設備軟件迭代的核心方式。無論是本地
    的頭像 發(fā)表于 02-09 16:26 ?336次閱讀
    一文吃透<b class='flag-5'>RK</b><b class='flag-5'>平臺</b>OTA升級開發(fā):<b class='flag-5'>從</b>邏輯<b class='flag-5'>到</b><b class='flag-5'>調試</b>的完整<b class='flag-5'>指南</b>

    RK平臺聲卡基礎知識總結(基于ALSA框架)

    RK 平臺聲卡基于ALSA(Advanced Linux Sound Architecture)框架構建,核心目標是實現(xiàn)音頻數(shù)據(jù)的“采集 -
    的頭像 發(fā)表于 02-06 16:58 ?3191次閱讀
    <b class='flag-5'>RK</b><b class='flag-5'>平臺</b><b class='flag-5'>聲卡</b>基礎知識總結(基于ALSA框架)

    RK平臺Linux IOMMU開發(fā):原理到實戰(zhàn)

    在瑞芯微(RK)芯片的 Linux 開發(fā)中,IOMMU(輸入輸出內存管理單元)是個關鍵部件 —— 它能實現(xiàn)設備虛擬地址(IOVA)與物理地址的轉換,還能控制讀寫權限、處理缺頁 / 總線異常
    的頭像 發(fā)表于 02-04 16:24 ?1544次閱讀
    <b class='flag-5'>RK</b><b class='flag-5'>平臺</b>Linux IOMMU開發(fā):<b class='flag-5'>從</b>原理到<b class='flag-5'>實戰(zhàn)</b>

    一文打通Rockchip DP調試原理到實戰(zhàn),覆蓋RK3399/RK3576/RK3588全平臺

    嵌入式開發(fā)中,DisplayPort(DP)接口的調試常讓工程師頭疼 —— 不同芯片特性差異大、Type-C 與標準口配置不同、高分辨率輸出異常、MST 屏適配難… 尤其是 Rock
    的頭像 發(fā)表于 02-04 16:14 ?353次閱讀
    一文打通Rockchip DP<b class='flag-5'>調試</b>:<b class='flag-5'>從</b>原理到<b class='flag-5'>實戰(zhàn)</b>,覆蓋<b class='flag-5'>RK</b>3399/<b class='flag-5'>RK</b>3576/<b class='flag-5'>RK</b>3588全<b class='flag-5'>平臺</b>

    RK3326音頻調試避坑指南“錄不了”“全功能跑通”的實戰(zhàn)歷程

    在嵌入式 AI 語音設備領域,RK3326 憑借性價比和對通道音頻的支持,成為不少開發(fā)者的首選主控。但音頻
    的頭像 發(fā)表于 02-03 16:06 ?1944次閱讀
    <b class='flag-5'>RK</b>3326<b class='flag-5'>音頻</b><b class='flag-5'>調試</b>避坑<b class='flag-5'>指南</b>:<b class='flag-5'>從</b>“錄不了”<b class='flag-5'>到</b>“全功能跑通”的<b class='flag-5'>實戰(zhàn)</b>歷程

    RK3326平臺GC2385攝像頭調試實戰(zhàn)報錯到功能正常的完整排查指南

    在嵌入式硬件調試場景中,攝像頭模塊的適配常涉及驅動、配置文件、硬件參數(shù)的環(huán)節(jié)協(xié)同,任一環(huán)節(jié)偏差都可能引發(fā)預覽失敗、拍照異常問題。本文以RK
    的頭像 發(fā)表于 02-03 16:04 ?1169次閱讀
    <b class='flag-5'>RK</b>3326<b class='flag-5'>平臺</b>GC2385攝像頭<b class='flag-5'>調試</b><b class='flag-5'>實戰(zhàn)</b>:<b class='flag-5'>從</b>報錯到功能正常的完整排查<b class='flag-5'>指南</b>

    深入解析RK平臺GPIO驅動:原理到調試,開發(fā)者必看指南

    GPIO(通用輸入輸出)作為嵌入式系統(tǒng)中最基礎也最常用的硬件接口,是連接芯片與外部設備的 “橋梁”。從簡單的 LED 控制、按鍵檢測,復雜的傳感器通信,都離不開 GPIO 的支持。在瑞芯微(
    的頭像 發(fā)表于 02-03 15:53 ?1034次閱讀
    深入解析<b class='flag-5'>RK</b><b class='flag-5'>平臺</b>GPIO驅動:<b class='flag-5'>從</b>原理到<b class='flag-5'>調試</b>,開發(fā)者必看<b class='flag-5'>指南</b>

    RK3576音頻調試全紀錄

    在嵌入式設備開發(fā)中,音頻調試往往是“牽一發(fā)而動全身” 的環(huán)節(jié) —— 既需要對齊硬件原理圖的信號定義,又要適配軟件層的 codec 配置、引腳映射和驅動邏輯。本文基于 RK3576
    的頭像 發(fā)表于 02-02 17:13 ?1466次閱讀
    <b class='flag-5'>RK</b>3576<b class='flag-5'>音頻</b><b class='flag-5'>調試</b>全紀錄

    RK?平臺?USB?攝像頭成像調試指南信號畫質的全流程優(yōu)化

    信號調試畫質優(yōu)化的實操方案,助力開發(fā)者快速解決成像難題。 一、先搞懂:成像差的核心誘因 USB?攝像頭成像模糊、卡頓、斷連問題,本質是?“信號傳輸”?與?“硬件適配”?雙重問題:
    的頭像 發(fā)表于 11-26 07:05 ?817次閱讀
    <b class='flag-5'>RK</b>?<b class='flag-5'>平臺</b>?USB?攝像頭成像<b class='flag-5'>調試</b><b class='flag-5'>指南</b>:<b class='flag-5'>從</b>信號<b class='flag-5'>到</b>畫質的全流程優(yōu)化

    深入解析rk平臺Android Bootloader核心代碼:啟動流程AVB驗證

    android_bootloader.c的核心代碼,帶你讀懂Android設備Bootloader
    的頭像 發(fā)表于 01-22 07:06 ?278次閱讀
    深入解析<b class='flag-5'>rk</b><b class='flag-5'>平臺</b><b class='flag-5'>Android</b> Bootloader<b class='flag-5'>核心</b>代碼:<b class='flag-5'>從</b>啟動流程<b class='flag-5'>到</b>AVB驗證

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

    RK?Android平臺開發(fā)的同學,大概率都遇到過這些音頻問題:插耳機沒聲音、通話音量忽大忽小、新增的HDMI聲卡沒適配、錄音增益
    的頭像 發(fā)表于 02-26 08:08 ?103次閱讀
    <b class='flag-5'>RK</b>3576 <b class='flag-5'>Android</b>15<b class='flag-5'>音頻</b>開發(fā)必看:alsa_route<b class='flag-5'>核心</b>文件解析與修改場景