久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Android音頻開發(fā)全解析:從AudioTrack到AAudio,架構(gòu)、API與性能優(yōu)化實(shí)戰(zhàn)

Android音頻開發(fā)全解析:從AudioTrack到AAudio,架構(gòu)、API與性能優(yōu)化實(shí)戰(zhàn) 1. 項(xiàng)目概述為什么我們需要一篇全面的Android Audio梳理干了這么多年Android開發(fā)音頻這塊兒絕對(duì)是讓很多開發(fā)者又愛(ài)又恨的領(lǐng)域。愛(ài)的是它幾乎是所有多媒體應(yīng)用、游戲、社交軟件的基石不可或缺恨的是它的知識(shí)體系龐雜涉及Framework、Native、硬件驅(qū)動(dòng)多個(gè)層面API繁多且歷史包袱重一個(gè)不小心就容易踩坑。你可能會(huì)用AudioTrack播放一段PCM用AudioRecord錄個(gè)音但當(dāng)你需要處理低延遲音頻、實(shí)現(xiàn)混音、適配五花八門的設(shè)備或者解決那些“在我手機(jī)上好好的怎么到他那就沒(méi)聲了”的玄學(xué)問(wèn)題時(shí)就會(huì)發(fā)現(xiàn)之前的知識(shí)都是零散的碎片。網(wǎng)上關(guān)于Android Audio的資料不少但要么是官方文檔的直譯過(guò)于抽象要么是某個(gè)具體API的簡(jiǎn)單示例缺乏系統(tǒng)性的串聯(lián)和深度原理剖析。很多開發(fā)者包括幾年前的我都是在“面向搜索引擎編程”和“試錯(cuò)法”中摸索效率低下且難以建立穩(wěn)固的知識(shí)體系。所以這篇梳理的目的就是把我這些年趟過(guò)的坑、讀過(guò)的源碼、總結(jié)的經(jīng)驗(yàn)進(jìn)行一次系統(tǒng)性的整合。它不是API文檔的羅列而是一個(gè)一線開發(fā)者視角的、貫穿上下文的“地圖”。我會(huì)從最核心的音頻基礎(chǔ)概念講起深入到AudioTrack、AudioRecord、AudioManager等關(guān)鍵類的內(nèi)部機(jī)制再拓展到音頻焦點(diǎn)、低延遲、音頻路由等高級(jí)話題。目標(biāo)是讓你看完之后不僅能“會(huì)用”更能“懂為什么這么用”以及“出了問(wèn)題知道怎么查”。無(wú)論是剛接觸音頻的新手還是希望深化理解的資深開發(fā)者都能從中找到你需要的東西。2. Android音頻系統(tǒng)架構(gòu)全景解析要玩轉(zhuǎn)Android Audio不能只停留在Java API的調(diào)用層面必須對(duì)其整體架構(gòu)有個(gè)清晰的認(rèn)知。Android的音頻系統(tǒng)是一個(gè)典型的分層架構(gòu)自下而上可以分為L(zhǎng)inux內(nèi)核層、硬件抽象層HAL、Native框架層、Java框架層和應(yīng)用層。理解每一層的職責(zé)是解決復(fù)雜音頻問(wèn)題的鑰匙。2.1 從應(yīng)用層到內(nèi)核一次音頻播放的旅程當(dāng)我們調(diào)用AudioTrack.write()方法播放一段音樂(lè)時(shí)背后發(fā)生了一系列復(fù)雜的交互。應(yīng)用層Java你的App代碼在這里。你創(chuàng)建了一個(gè)AudioTrack對(duì)象設(shè)置了采樣率、聲道、數(shù)據(jù)格式等參數(shù)然后循環(huán)調(diào)用write方法將PCM數(shù)據(jù)塊推送出去。對(duì)于應(yīng)用開發(fā)者而言世界到此為止。但AudioTrack只是一個(gè)“客戶端”。Java框架層AudioTrack類本身并不處理音頻數(shù)據(jù)。它的核心是一個(gè)JNIJava Native Interface橋接。當(dāng)你調(diào)用write時(shí)數(shù)據(jù)通過(guò)JNI被傳遞到了Native層。同時(shí)Java層還管理著音頻焦點(diǎn)AudioManager、音量控制、設(shè)備路由等策略性的邏輯。Native框架層C/C這是Android音頻系統(tǒng)的“大腦”和“中樞神經(jīng)”位于frameworks/av/media目錄下。關(guān)鍵組件包括AudioFlinger 音頻系統(tǒng)的核心服務(wù)一個(gè)常駐進(jìn)程mediaserver。它負(fù)責(zé)混音Mix、音頻流的路由、效果器Effect的管理。所有應(yīng)用的音頻流最終都匯聚到這里。AudioTrack在Native層的對(duì)應(yīng)物會(huì)與AudioFlinger建立連接形成一個(gè)“播放線程Playback Thread”和“共享內(nèi)存緩沖區(qū)”。AudioPolicyService 音頻策略的決策者。它根據(jù)當(dāng)前系統(tǒng)狀態(tài)如有線耳機(jī)插入、藍(lán)牙連接、電話接入、應(yīng)用請(qǐng)求的音頻屬性如USAGE_MEDIA,USAGE_VOICE_COMMUNICATION來(lái)決定音頻流應(yīng)該輸出到哪個(gè)設(shè)備揚(yáng)聲器、聽(tīng)筒、藍(lán)牙耳機(jī)等。它告訴AudioFlinger“該怎么走”。TinyALSA / AAudio 這是更底層的接口。傳統(tǒng)路徑上AudioFlinger通過(guò)TinyALSA庫(kù)與HAL交互。而在Android O8.0之后引入的AAudio則提供了一條繞過(guò)AudioFlinger的“高速通道”專為需要超低延遲的音頻應(yīng)用設(shè)計(jì)如專業(yè)音樂(lè)軟件、實(shí)時(shí)語(yǔ)音處理。硬件抽象層HAL這是為了屏蔽不同硬件廠商如高通、聯(lián)發(fā)科芯片差異而設(shè)的接口層。AudioFlinger通過(guò)標(biāo)準(zhǔn)的Audio HAL接口與硬件驅(qū)動(dòng)對(duì)話。廠商會(huì)實(shí)現(xiàn)具體的HAL將標(biāo)準(zhǔn)指令翻譯成自家芯片能懂的命令。Linux內(nèi)核層最底層包含音頻驅(qū)動(dòng)如ALSA驅(qū)動(dòng)和實(shí)際的音頻編解碼器Codec硬件。驅(qū)動(dòng)負(fù)責(zé)管理DMA直接內(nèi)存訪問(wèn)將音頻數(shù)據(jù)從內(nèi)存搬運(yùn)到Codec最終轉(zhuǎn)換成模擬電信號(hào)推動(dòng)喇叭發(fā)聲。整個(gè)過(guò)程可以簡(jiǎn)化為App (AudioTrack) - JNI - AudioFlinger (混音) - Audio HAL - Kernel Driver - Hardware Codec - Speaker。理解這個(gè)鏈條當(dāng)出現(xiàn)無(wú)聲、雜音、延遲大等問(wèn)題時(shí)你就能系統(tǒng)地定位問(wèn)題可能出在哪個(gè)環(huán)節(jié)。2.2 AudioFlinger與AudioPolicyService核心服務(wù)深度剖析這兩個(gè)服務(wù)是Native層的靈魂值得深入了解一下。AudioFlinger的工作模式是“生產(chǎn)者-消費(fèi)者”。每個(gè)AudioTrack生產(chǎn)者將PCM數(shù)據(jù)寫入一塊共享內(nèi)存Shared Memory。AudioFlinger內(nèi)部的各個(gè)播放線程消費(fèi)者從不同的共享內(nèi)存中讀取數(shù)據(jù)按照一定的規(guī)則如音量、平衡進(jìn)行混合Mix生成最終的PCM流再通過(guò)HAL輸出。它內(nèi)部維護(hù)著一個(gè)“混音器Mixer”這是計(jì)算密集型操作尤其在多路音頻同時(shí)播放時(shí)。注意AudioFlinger的混音是在一個(gè)固定的“輸出采樣率”和“音頻格式”下進(jìn)行的。如果你創(chuàng)建的AudioTrack參數(shù)如采樣率44.1kHz與系統(tǒng)當(dāng)前輸出設(shè)備如藍(lán)牙耳機(jī)可能只支持48kHz不匹配AudioFlinger會(huì)使用“重采樣Resampler”進(jìn)行轉(zhuǎn)換這會(huì)引入輕微的音質(zhì)損失和CPU開銷。在開發(fā)音樂(lè)類App時(shí)應(yīng)盡量使用設(shè)備支持的通用采樣率如48kHz。AudioPolicyService管理著一套復(fù)雜的規(guī)則引擎。它定義了“音頻場(chǎng)景”。例如當(dāng)媒體音樂(lè)正在播放時(shí)插入有線耳機(jī)音頻自動(dòng)路由到耳機(jī)。當(dāng)有電話打入時(shí)媒體音樂(lè)會(huì)自動(dòng)降低音量Ducking或暫停這是通過(guò)音頻焦點(diǎn)Audio Focus機(jī)制實(shí)現(xiàn)的而策略的執(zhí)行者就是AudioPolicyService。當(dāng)你啟動(dòng)一個(gè)語(yǔ)音通話應(yīng)用如微信語(yǔ)音時(shí)它會(huì)請(qǐng)求USAGE_VOICE_COMMUNICATION屬性的音頻流AudioPolicyService會(huì)優(yōu)先將其路由到聽(tīng)筒或藍(lán)牙耳機(jī)并可能啟動(dòng)回聲消除AEC等音頻效果。它的配置通常保存在audio_policy_configuration.xml文件中定義了設(shè)備上所有的輸入/輸出設(shè)備端口如揚(yáng)聲器、聽(tīng)筒、藍(lán)牙A2DP、藍(lán)牙SCO、以及不同場(chǎng)景下的路由策略。在系統(tǒng)定制或深度優(yōu)化時(shí)經(jīng)常會(huì)修改這個(gè)文件。3. 核心API精講與實(shí)戰(zhàn)避坑指南掌握了架構(gòu)我們?cè)賮?lái)啃最常用的幾個(gè)“硬骨頭”API。這里不講簡(jiǎn)單的Hello World而是聚焦于高階用法和那些容易栽跟頭的細(xì)節(jié)。3.1 AudioTrack不僅僅是播放AudioTrack是播放PCM數(shù)據(jù)的主要工具。它的構(gòu)造函數(shù)參數(shù)眾多但最關(guān)鍵的是streamType在API 21后逐漸被attributes替代和mode。Mode的選擇STATIC vs STREAMMODE_STATIC 一次性將所有音頻數(shù)據(jù)加載到內(nèi)存。適用于短促的提示音如按鈕點(diǎn)擊聲。優(yōu)點(diǎn)是延遲極低因?yàn)閿?shù)據(jù)早已就緒。調(diào)用write后只需play即可。// 靜態(tài)模式示例 byte[] soundData loadShortSound(); // 加載短音頻數(shù)據(jù) AudioTrack track new AudioTrack.Builder() .setAudioAttributes(new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .build()) .setAudioFormat(new AudioFormat.Builder() .setEncoding(AudioFormat.ENCODING_PCM_16BIT) .setSampleRate(44100) .setChannelMask(AudioFormat.CHANNEL_OUT_STEREO) .build()) .setBufferSizeInBytes(soundData.length) .setTransferMode(AudioTrack.MODE_STATIC) // 靜態(tài)模式 .build(); track.write(soundData, 0, soundData.length); track.play(); // 數(shù)據(jù)已就緒直接播放MODE_STREAM 需要建立一個(gè)數(shù)據(jù)流不斷調(diào)用write來(lái)補(bǔ)充緩沖區(qū)。適用于音樂(lè)、網(wǎng)絡(luò)音頻流等大容量或?qū)崟r(shí)數(shù)據(jù)。這是最常用的模式。Buffer Size的計(jì)算與延遲控制緩沖區(qū)大小是個(gè)權(quán)衡藝術(shù)。太小會(huì)導(dǎo)致write操作頻繁如果數(shù)據(jù)供給不及時(shí)就會(huì)發(fā)生“欠載Underrun”產(chǎn)生卡頓或爆音。太大則會(huì)導(dǎo)致播放延遲Latency增加。 一個(gè)常見(jiàn)的計(jì)算公式是緩沖區(qū)大小字節(jié) 采樣率 × 聲道數(shù) × 每采樣字節(jié)數(shù) × 期望緩沖時(shí)間秒。 例如對(duì)于44.1kHz立體聲16位PCM希望有100ms緩沖44100 * 2 * 2 * 0.1 17640字節(jié)。在實(shí)際使用中AudioTrack提供了一個(gè)getMinBufferSize方法可以獲取系統(tǒng)建議的最小緩沖區(qū)大小通常以此作為參考。實(shí)操心得對(duì)于需要低延遲的交互式音頻如鋼琴App僅僅調(diào)整緩沖區(qū)大小可能不夠。此時(shí)應(yīng)優(yōu)先考慮使用AAudio APIAndroid O及以上。AAudio提供了更簡(jiǎn)單的接口和更可控的路徑能顯著降低延遲。如果必須用AudioTrack確保在STREAM模式下使用獨(dú)立的線程高頻次例如每10-20ms調(diào)用write并監(jiān)控PlaybackHeadPosition來(lái)同步。播放狀態(tài)管理與資源釋放AudioTrack的狀態(tài)機(jī)STATE_INITIALIZED,STATE_NO_STATIC_DATA,STATE_STOPPED等需要小心處理。一個(gè)常見(jiàn)的錯(cuò)誤是在stop()或pause()后沒(méi)有flush()就再次write數(shù)據(jù)這可能導(dǎo)致音頻混亂。正確的生命周期是new AudioTrack()-STATE_INITIALIZEDwrite()(對(duì)于STATIC模式) -STATE_NO_STATIC_DATA變?yōu)閿?shù)據(jù)就緒play()-STATE_PLAYINGpause()-STATE_PAUSED(緩沖區(qū)數(shù)據(jù)保留)stop()-STATE_STOPPED(播放頭復(fù)位但緩沖區(qū)數(shù)據(jù)可能保留)flush()- 清空緩沖區(qū)在STOPPED狀態(tài)調(diào)用release()- 釋放所有資源對(duì)象不可再用。務(wù)必在Activity/Fragment的onDestroy或Service的onDestroy中調(diào)用release()否則會(huì)導(dǎo)致音頻設(shè)備被占用其他應(yīng)用無(wú)法發(fā)聲甚至引起系統(tǒng)音頻異常。3.2 AudioRecord捕獲音頻的細(xì)節(jié)AudioRecord用于從麥克風(fēng)等輸入設(shè)備采集PCM數(shù)據(jù)。其核心是不斷從環(huán)形緩沖區(qū)中讀取數(shù)據(jù)。音頻源AudioSource的選擇MediaRecorder.AudioSource中定義了多種音頻源選錯(cuò)會(huì)導(dǎo)致錄制效果天差地別。MIC 主麥克風(fēng)默認(rèn)選項(xiàng)。CAMCORDER 指向與相機(jī)方向一致的麥克風(fēng)用于錄像時(shí)獲得更好的方向性收音。VOICE_COMMUNICATION/VOICE_RECOGNITION 用于語(yǔ)音通話或語(yǔ)音識(shí)別。系統(tǒng)可能會(huì)為這些源自動(dòng)啟用回聲消除AEC、噪聲抑制NS等預(yù)處理效果。這是實(shí)現(xiàn)高質(zhì)量語(yǔ)音錄制的關(guān)鍵。UNPROCESSED 請(qǐng)求盡可能原始的、未經(jīng)任何處理的音頻數(shù)據(jù)。適用于需要自己進(jìn)行音頻處理的專業(yè)應(yīng)用。配置與權(quán)限除了采樣率、聲道通常單聲道CHANNEL_IN_MONO已足夠、位深還需要注意bufferSizeInBytes。和AudioTrack類似可以使用getMinBufferSize獲取建議值。權(quán)限方面需要android.permission.RECORD_AUDIO并且從Android 6.0 (API 23)開始需要在運(yùn)行時(shí)動(dòng)態(tài)申請(qǐng)。讀取數(shù)據(jù)的正確姿勢(shì)AudioRecord的典型使用模式是在一個(gè)后臺(tái)線程中循環(huán)讀取// 假設(shè) audioRecord 已正確初始化 byte[] buffer new byte[bufferSize]; audioRecord.startRecording(); while (isRecording) { int bytesRead audioRecord.read(buffer, 0, buffer.length); if (bytesRead 0) { // 處理 buffer 中的數(shù)據(jù)例如寫入文件、編碼、發(fā)送網(wǎng)絡(luò)等 processAudioData(buffer, bytesRead); } else { // 處理錯(cuò)誤bytesRead可能是 ERROR, ERROR_BAD_VALUE, ERROR_INVALID_OPERATION Log.e(AudioRecord, Error reading audio data: bytesRead); break; } } audioRecord.stop(); audioRecord.release();避坑指南read方法是阻塞的直到有數(shù)據(jù)可讀。如果處理processAudioData太慢會(huì)導(dǎo)致讀取線程阻塞可能丟失音頻數(shù)據(jù)。因此處理邏輯要高效或者將數(shù)據(jù)快速轉(zhuǎn)移到另一個(gè)隊(duì)列如LinkedBlockingQueue中由其他線程慢慢處理。另外確保在結(jié)束錄制時(shí)調(diào)用stop()否則麥克風(fēng)會(huì)一直處于占用狀態(tài)其他應(yīng)用無(wú)法使用。3.3 AudioManager音頻系統(tǒng)的指揮官AudioManager是一個(gè)系統(tǒng)服務(wù)的客戶端用于管理全局音頻行為和策略。它的很多方法調(diào)用最終都會(huì)影響到前面提到的AudioPolicyService。音頻焦點(diǎn)Audio Focus這是Android上協(xié)調(diào)多個(gè)App音頻播放的核心機(jī)制。當(dāng)一個(gè)App開始播放音頻時(shí)它應(yīng)該請(qǐng)求音頻焦點(diǎn)。當(dāng)另一個(gè)App也請(qǐng)求焦點(diǎn)時(shí)系統(tǒng)會(huì)根據(jù)焦點(diǎn)策略如AUDIOFOCUS_GAIN表示長(zhǎng)期持有AUDIOFOCUS_GAIN_TRANSIENT表示短暫持有和當(dāng)前焦點(diǎn)持有者的屬性決定如何處理。焦點(diǎn)持有者會(huì)收到回調(diào)OnAudioFocusChangeListener告知焦點(diǎn)丟失AUDIOFOCUS_LOSS或暫時(shí)丟失AUDIOFOCUS_LOSS_TRANSIENT此時(shí)應(yīng)該暫停播放或降低音量。正確實(shí)現(xiàn)音頻焦點(diǎn)是應(yīng)用“有禮貌”的表現(xiàn)。音樂(lè)播放器在開始播放前請(qǐng)求AUDIOFOCUS_GAIN在接到電話另一個(gè)App請(qǐng)求AUDIOFOCUS_GAIN_TRANSIENT時(shí)自動(dòng)暫停電話掛斷后收到AUDIOFOCUS_GAIN回調(diào)自動(dòng)恢復(fù)播放。導(dǎo)航App的提示音則應(yīng)該請(qǐng)求AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK讓背景音樂(lè)只是降低音量Ducking而不是完全停止。音量控制與鈴聲模式AudioManager提供了調(diào)整不同音頻流類型的音量的方法如setStreamVolume。但注意直接調(diào)整音量可能會(huì)影響用戶體驗(yàn)通常應(yīng)該提供UI控件讓用戶自己調(diào)節(jié)。getRingerMode()和setRingerMode()可以獲取和設(shè)置鈴聲模式靜音、振動(dòng)、正常。設(shè)備連接與路由監(jiān)聽(tīng)通過(guò)AudioManager可以獲取當(dāng)前連接的音頻設(shè)備列表getDevices并監(jiān)聽(tīng)設(shè)備連接狀態(tài)的變化registerAudioDeviceCallback。這對(duì)于需要根據(jù)輸出設(shè)備調(diào)整音頻策略的應(yīng)用非常有用例如連接到藍(lán)牙耳機(jī)時(shí)自動(dòng)切換到更適合的音頻編碼格式。4. 高級(jí)話題與性能優(yōu)化實(shí)戰(zhàn)掌握了基礎(chǔ)API和架構(gòu)我們可以探討一些更深入的話題這些往往是打造高質(zhì)量音頻應(yīng)用的關(guān)鍵。4.1 低延遲音頻AAudio vs OpenSL ES對(duì)于音樂(lè)游戲、實(shí)時(shí)合成器、專業(yè)錄音等場(chǎng)景音頻延遲從觸發(fā)事件到聽(tīng)到聲音的時(shí)間至關(guān)重要。Android上主要有兩套原生音頻APIOpenSL ES 一個(gè)跨平臺(tái)的多媒體API在Android早期版本API 16中引入。它功能強(qiáng)大但接口相對(duì)復(fù)雜緩沖區(qū)隊(duì)列管理繁瑣且延遲表現(xiàn)因廠商實(shí)現(xiàn)而異。AAudio Android OAPI 26引入的新API設(shè)計(jì)目標(biāo)就是高性能、低延遲。它提供了更簡(jiǎn)潔的流式接口并鼓勵(lì)使用“回調(diào)模式”數(shù)據(jù)驅(qū)動(dòng)而非“阻塞讀寫模式”讓應(yīng)用能在音頻數(shù)據(jù)需要時(shí)被精確喚醒減少不必要的等待和緩沖區(qū)。AAudio實(shí)戰(zhàn)要點(diǎn)流構(gòu)建器 使用AAudioStreamBuilder來(lái)配置流指定設(shè)備ID、方向輸入/輸出、格式、采樣率等。可以請(qǐng)求性能模式AAUDIO_PERFORMANCE_MODE_LOW_LATENCY。回調(diào)模式 實(shí)現(xiàn)AAudioStream_dataCallback當(dāng)音頻引擎需要數(shù)據(jù)輸出或有新數(shù)據(jù)可用輸入時(shí)回調(diào)函數(shù)會(huì)被觸發(fā)。這是實(shí)現(xiàn)最低延遲的關(guān)鍵。設(shè)備選擇 可以查詢并指定特定的輸入/輸出設(shè)備如內(nèi)置麥克風(fēng)、USB音頻接口。使用AAudioStream_getDeviceId可以獲取當(dāng)前流使用的設(shè)備。錯(cuò)誤處理 AAudio有完善的狀態(tài)和錯(cuò)誤碼。當(dāng)發(fā)生AAUDIO_ERROR_DISCONNECTED設(shè)備斷開時(shí)需要關(guān)閉舊流重新基于新設(shè)備創(chuàng)建流。經(jīng)驗(yàn)之談如果你的應(yīng)用目標(biāo)API在26以上且對(duì)延遲敏感毫不猶豫地選擇AAudio。對(duì)于需要兼容舊版本的應(yīng)用可以采取“AAudio優(yōu)先OpenSL ES降級(jí)”的策略。在支持AAudio的設(shè)備上延遲通??梢苑€(wěn)定在10-20毫秒以內(nèi)而舊的AudioTrack在MODE_STREAM下很難做到低于50毫秒。4.2 音頻數(shù)據(jù)處理與編解碼AudioTrack和AudioRecord處理的是原始的PCM數(shù)據(jù)。但實(shí)際應(yīng)用中我們經(jīng)常需要處理壓縮格式如MP3, AAC, OGG或進(jìn)行音頻處理。解碼播放 使用MediaExtractor分離容器中的音頻軌再用MediaCodec進(jìn)行解碼得到PCM數(shù)據(jù)后喂給AudioTrack或AAudioStream。這是一個(gè)異步、緩沖區(qū)隊(duì)列管理的復(fù)雜過(guò)程涉及InputBuffer、OutputBuffer、dequeueInputBuffer、queueInputBuffer、dequeueOutputBuffer、releaseOutputBuffer等一系列調(diào)用。務(wù)必處理好BUFFER_FLAG_END_OF_STREAM標(biāo)志和緩沖區(qū)的時(shí)間戳信息以實(shí)現(xiàn)平滑播放和同步。編碼錄制 過(guò)程相反。從AudioRecord獲取PCM送入MediaCodec編碼器獲取編碼后的數(shù)據(jù)如AAC幀再寫入文件如MP4或發(fā)送網(wǎng)絡(luò)。需要注意配置編碼器的比特率、采樣率、聲道數(shù)等參數(shù)以及處理關(guān)鍵幀。音頻處理 如果需要在播放或錄制過(guò)程中實(shí)時(shí)處理PCM如變聲、加混響、均衡器有幾種方案在Java層處理 簡(jiǎn)單但性能差僅適用于非常輕量的操作。使用Android內(nèi)置的音頻效果器 通過(guò)AudioEffect類如Equalizer,BassBoost,Virtualizer可以附加到AudioTrack或MediaPlayer上。這是系統(tǒng)級(jí)的高效實(shí)現(xiàn)。Native層處理推薦 使用C/C庫(kù)如WebRTC的音頻處理模塊、SpeexDSP、自己寫的NEON優(yōu)化代碼在Native層處理??梢詫⑻幚磉壿嫹旁贏Audio的回調(diào)函數(shù)中或者放在AudioRecord讀取線程和AudioTrack寫入線程之間。這是實(shí)現(xiàn)復(fù)雜、高性能實(shí)時(shí)處理的唯一途徑。4.3 音頻路由與多設(shè)備管理現(xiàn)代Android設(shè)備音頻出口眾多。管理好路由才能保證聲音從正確的地方出來(lái)。監(jiān)聽(tīng)路由變化 如前所述注冊(cè)AudioDeviceCallback。當(dāng)用戶插入耳機(jī)、連接藍(lán)牙音箱時(shí)你的應(yīng)用可以收到通知。此時(shí)你可能需要更新UI 顯示當(dāng)前音頻輸出設(shè)備圖標(biāo)。重新初始化音頻流 特別是使用AAudio時(shí)不同的物理設(shè)備可能支持不同的最優(yōu)配置采樣率、緩沖區(qū)大小。收到設(shè)備變更后最好關(guān)閉舊流用新設(shè)備ID重新創(chuàng)建流。調(diào)整音頻策略 例如切換到藍(lán)牙耳機(jī)時(shí)由于藍(lán)牙編解碼如SBC, AAC, aptX會(huì)引入額外延遲對(duì)于節(jié)奏游戲可能需要調(diào)整判定窗口。手動(dòng)指定輸出設(shè)備 從Android O開始AudioManager提供了setCommunicationDevice等方法但更通用的方式是在創(chuàng)建AudioTrack或AAudioStream時(shí)通過(guò)AudioAttributes或AAudioStreamBuilder指定AudioDeviceInfo。這要求你先通過(guò)AudioManager.getDevices枚舉設(shè)備。處理通話與錄音沖突 這是另一個(gè)復(fù)雜場(chǎng)景。當(dāng)系統(tǒng)正在進(jìn)行VoIP通話使用AudioManager.MODE_IN_COMMUNICATION模式時(shí)普通的AudioRecord錄制可能會(huì)失敗或錄到的是通話聲音。此時(shí)需要確保你的錄音請(qǐng)求使用了正確的音頻源如VOICE_COMMUNICATION并妥善處理音頻焦點(diǎn)。5. 疑難雜癥排查與調(diào)試技巧即使理解了所有原理實(shí)際開發(fā)中依然會(huì)遇到各種光怪陸離的問(wèn)題。這里分享一些常見(jiàn)的“坑”和排查手段。5.1 常見(jiàn)問(wèn)題速查表問(wèn)題現(xiàn)象可能原因排查步驟與解決方案播放無(wú)聲1. 權(quán)限未申請(qǐng)Android 6.0。2.AudioTrack未調(diào)用play()。3. 寫入的數(shù)據(jù)全是0或格式錯(cuò)誤。4. 音頻焦點(diǎn)被其他應(yīng)用持有且你的應(yīng)用未正確處理焦點(diǎn)丟失。5. 輸出設(shè)備路由錯(cuò)誤如應(yīng)在揚(yáng)聲器卻路由到了聽(tīng)筒。6. 系統(tǒng)音量或媒體音量為0。1. 檢查RECORD_AUDIO權(quán)限錄制時(shí)和運(yùn)行時(shí)申請(qǐng)。2. 添加日志確認(rèn)play()被調(diào)用且狀態(tài)正確。3. 檢查PCM數(shù)據(jù)源用工具如Audacity查看波形。確認(rèn)采樣率、聲道、位深與AudioFormat匹配。4. 實(shí)現(xiàn)AudioManager.OnAudioFocusChangeListener檢查焦點(diǎn)狀態(tài)。5. 監(jiān)聽(tīng)AudioDeviceCallback檢查當(dāng)前輸出設(shè)備。嘗試用AudioManager調(diào)整路由。6. 檢查AudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)。錄音無(wú)聲或雜音1. 權(quán)限未申請(qǐng)。2. 音頻源AudioSource選擇錯(cuò)誤例如在通話中用了MIC而非VOICE_COMMUNICATION。3. 緩沖區(qū)大小不合適導(dǎo)致數(shù)據(jù)丟失或重疊。4. 麥克風(fēng)被其他應(yīng)用獨(dú)占。5. 設(shè)備硬件或驅(qū)動(dòng)問(wèn)題。1. 同上檢查權(quán)限。2. 根據(jù)場(chǎng)景選擇合適的AudioSource語(yǔ)音場(chǎng)景優(yōu)先嘗試VOICE_COMMUNICATION。3. 使用getMinBufferSize獲取建議值并適當(dāng)增大。4. 嘗試重啟應(yīng)用或設(shè)備排除占用。5. 使用系統(tǒng)自帶的錄音機(jī)測(cè)試硬件是否正常。播放延遲高1.AudioTrack緩沖區(qū)設(shè)置過(guò)大。2. 使用MODE_STREAM但write調(diào)用間隔不穩(wěn)定。3. 系統(tǒng)負(fù)載高AudioFlinger混音線程調(diào)度延遲。4. 輸出設(shè)備本身有延遲如某些藍(lán)牙音箱。1. 在保證不欠載的前提下減小緩沖區(qū)大小。使用getMinBufferSize。2. 確保在獨(dú)立的高優(yōu)先級(jí)線程中穩(wěn)定、及時(shí)地調(diào)用write??紤]使用Choreographer或固定頻率的定時(shí)器。3.切換到AAudio API并啟用低延遲模式這是最有效的方案。4. 檢測(cè)當(dāng)前輸出設(shè)備對(duì)藍(lán)牙設(shè)備用戶教育或游戲內(nèi)做延遲補(bǔ)償校準(zhǔn)。音頻播放卡頓、爆音1.write數(shù)據(jù)不及時(shí)緩沖區(qū)欠載Underrun。2.AudioTrack的播放線程優(yōu)先級(jí)不夠被系統(tǒng)搶占。3. GC垃圾回收導(dǎo)致線程暫停。4. PCM數(shù)據(jù)本身有問(wèn)題如采樣率不匹配導(dǎo)致重采樣異常。1. 增大緩沖區(qū)或優(yōu)化數(shù)據(jù)供給線程的性能和優(yōu)先級(jí)。2. 創(chuàng)建AudioTrack的線程或數(shù)據(jù)寫入線程可以適當(dāng)提高優(yōu)先級(jí)。3. 避免在音頻線程中分配大量小對(duì)象使用對(duì)象池或直接內(nèi)存ByteBuffer.allocateDirect。4. 確保數(shù)據(jù)格式與AudioTrack配置完全一致特別是采樣率。多路音頻混合時(shí)音量或優(yōu)先級(jí)異常1. 未正確設(shè)置AudioAttributesusage, contentType。2. 未正確請(qǐng)求和管理音頻焦點(diǎn)。3. AudioPolicy策略配置問(wèn)題系統(tǒng)級(jí)。1. 為不同的音頻流設(shè)置正確的AudioAttributes例如媒體用USAGE_MEDIA警報(bào)用USAGE_ALARM。2. 嚴(yán)格遵循音頻焦點(diǎn)協(xié)議在播放前請(qǐng)求在失去焦點(diǎn)時(shí)暫停/停止在獲得焦點(diǎn)時(shí)恢復(fù)。3. 作為應(yīng)用開發(fā)者此問(wèn)題通常無(wú)法直接解決但可以檢查系統(tǒng)日志中AudioPolicy相關(guān)的錯(cuò)誤。5.2 高級(jí)調(diào)試工具與方法當(dāng)問(wèn)題比較棘手時(shí)需要借助更強(qiáng)大的工具。查看系統(tǒng)日志adb logcat是首選。重點(diǎn)關(guān)注AudioTrack,AudioFlinger,AudioPolicyManager,AAudio等Tag的日志。例如搜索“underrun”可以找到播放卡頓的直接證據(jù)搜索“setParameters”可以看到音頻路由的變化。使用dumpsysadb shell dumpsys audio命令可以打印出當(dāng)前整個(gè)音頻系統(tǒng)的完整狀態(tài)信息量巨大。包括所有活躍的AudioTrack及其客戶端、采樣率、緩沖區(qū)狀態(tài)。音頻焦點(diǎn)持有者棧。當(dāng)前所有輸入/輸出設(shè)備及其狀態(tài)。AudioPolicy的配置和當(dāng)前策略。這對(duì)于分析復(fù)雜的多應(yīng)用音頻交互問(wèn)題非常有用。性能跟蹤Systrace/Perfetto 使用Android Studio的Profiler或命令行工具perfetto/systrace可以捕捉一段時(shí)間內(nèi)的系統(tǒng)活動(dòng)。在音頻問(wèn)題排查時(shí)關(guān)注音頻線程 查看你的應(yīng)用音頻線程AudioTrack寫入線程、AAudio回調(diào)線程的調(diào)度情況是否被長(zhǎng)時(shí)間阻塞。binder調(diào)用 應(yīng)用與AudioFlinger/AudioPolicyService的Binder通信是否耗時(shí)過(guò)長(zhǎng)。CPU頻率 是否因?yàn)榻殿l導(dǎo)致數(shù)據(jù)處理不及時(shí)。編寫單元測(cè)試與模擬測(cè)試 對(duì)于核心的音頻處理邏輯如解碼后PCM數(shù)據(jù)的校驗(yàn)、自定義音頻算法的輸出盡量編寫本地單元測(cè)試JUnit。對(duì)于涉及硬件交互的部分如AudioRecord/AudioTrack可以嘗試使用AndroidX的androidx.test.core.app.ApplicationProvider和模擬上下文進(jìn)行集成測(cè)試或者使用依賴注入如Dagger在測(cè)試時(shí)替換真實(shí)的音頻組件為Mock對(duì)象。音頻開發(fā)就像在一條多層的立交橋上開車你需要知道自己在哪一層目標(biāo)出口在哪里并遵守交通規(guī)則音頻焦點(diǎn)。希望這篇超長(zhǎng)的梳理能成為你手上的詳細(xì)導(dǎo)航地圖。從宏觀架構(gòu)到微觀API從基礎(chǔ)使用到高級(jí)優(yōu)化從原理到實(shí)戰(zhàn)避坑內(nèi)容雖多但都是實(shí)踐中一點(diǎn)一滴積累起來(lái)的。真正的掌握還需要你在具體的項(xiàng)目中反復(fù)實(shí)踐、踩坑、總結(jié)。當(dāng)你再遇到音頻問(wèn)題時(shí)能夠冷靜地根據(jù)現(xiàn)象沿著“應(yīng)用層-Java層-Native層-HAL-驅(qū)動(dòng)”這條鏈去思考和分析那這篇梳理的目的就達(dá)到了。最后記住兩個(gè)黃金法則一是生命周期管理務(wù)必嚴(yán)謹(jǐn)及時(shí)release二是對(duì)延遲敏感就上AAudio。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
大乔未久88一区| 久热这里只有精品9| 天操天操夜操夜月月年年操操| 7777奇米影视久久| 婷婷五月天无码 | 久久超碰天天| 自拍大香蕉乱插| 91狠狠狠| 少妇色综合| 九九九九九九视频| 97干日韩| 亚洲天堂一区二区久久| 色噜噜人妻av中文字幕| 91爱做| 黄色欧美性爱视频| 女人喷水视频在线观看| 亚洲天堂男人天堂| 91总综合网| 亚洲国产ⅴ高清在线观看| 欧美激色| 99re视频在线观看这里只有精品| 亚洲一区日韩精品中文字幕| 超碰99在线观看| 青青草中文字幕| 九九九九日本 | 欧美五区| 亚洲色久| 国内三级自拍小视频在线观看| 国产精品成人午夜福利| 亚洲第一页欧美| 一区二区激情国产熟女| 99精品在线| 欧洲在线性爱视频| 97操综合| 天天综合网合集91| 成人精品视频一区二区| 开心激情站| 97人人夜夜精品视频| 91neishe| 中国少妇XXXX做受| 国产97色在线| 一区二区三区黄色片a| 深夜激情| 一本久道久久综合狠狠爱一密臀精| 麻豆性爱视频在线播放| 99re69综合| 亚洲综合激情五月久久| 日本三级网页| 美国精品国产精品| 3P乱轮视频| 日韩丝袜二区| 激情综合婷婷| 亚洲欧美日韩电影网站一区 | 在线观看一卡二卡| av一区二区三区 中文| 亚洲精品第一| 久久一二区四| 狠狠热这里都是精品| 色鬼在线综合| 福利大香蕉| 78精品在线| 日本不卡免费二区| 在线中文AV| 老鸭窝在线视频播放| 唯美清纯 妖精视频| 91人人| 九九久久久| 蜜桃臀av一区二区| 国产白丝网站| 91爱网| 高清在线不卡一区二区 视频| 91色婷婷综合久久中文字幕二区| 2021国产成人精品久久| 操啊国产| 温婉少妇玩3p| 欧美在线视频99| 淫色网综合| 2025亚洲男人天堂| 97久久精品亚洲中六字幕| 久久人妻少妇| 久欲AV| 国产色图乱伦| www.黄色在线| 精品在线观看视频在线| 四虎影视在线| 9999亚洲精品| 日韩免费在线观看不卡| 亚洲黄色a级片| 久操婷婷| 搡老女人老91妇女熟女| 亚洲影院成人| 色婷婷香蕉| 日本在线一二 | 一区二区三区男人的天堂| 精品国产乱码久久久久久网站入口| 久久午夜鲁丝片| 99综合| 97一本大道亚洲一区| 亚洲熟女综合网| 大香蕉强奸乱伦| 999综合色| 精品视频在线观看| 91一区二区| 人妻美腿丝袜日韩| 久久精品国产亚洲AV无码做| 99精品网站| 试看日韩黄片| 亚洲男人天堂网久久| 亚洲欧美啪啪| 国产又爽又黄| 中文字幕av片| 婷婷五月天激情网| 加勒比av网| 性色av蜜臀av色欲aV| 久久久久日本视| 中日韩久久久免费看| 男女激烈网站最新| 五十路熟女工口| 天天拍天| 日韩不卡a级视频专区| 国产刺激视频| 日韩熟女精一区二区三区不卡| 日韩亚洲中文字幕在线| 嗯嗯啊啊的视频| 国产中文精品一区二区在线观看| 搞中出视频在线观看| 0755午夜福利视频| 日韩丝袜二区| 竹菊影视国产一区二区| 日本道日本道中文字幕日本道最新日本道在线观看 | 97中文超碰| 精品一区二区三区麻豆| 色哟哟-国产专区| 国产成人在线观看网址| 麻豆天美传媒在线视频天堂| 97在线观看播放视频| 亚洲色图 图片| 福利伊人玖玖国产| 欧美男人的天堂| 日韩免费人妻色情网站| www.亚洲黄色| 亚洲系列欧美| 日本欧美成人片AAAA| 精品人妻一区二区免费看| 丁香五月天视频| 亚洲资源站| 啪啪视频mP4| 国模私拍一区二区三区神乳| 欧美狠狠操| 中文字幕一区二区三区字幕| 加勒比伊人影院| 成全动漫视频观看免费下载| 蜜臀99999| 久久无码成人| 国产精品诱惑| 1024午夜激情男人的天堂| 一个人免费HD91视频| 0755午夜福利视频| 亚洲丝袜天堂| 色香蕉影院| 久久精品国产精品一区| 蜜桃臀一区二区aV| 欧美激情亚洲色图| 美女91av| 96免费视频在线| 艹少妇网站| 韩国三级色呦呦| 人妻免费观看| 刺激性视频黄页| 不卡一区二区日本视频| 粉嫩av平台| 夫妻AV网站| 九九视品黄色| 日日日日做夜夜夜夜无码| 精品欧美日韩在线观看| 色天堂在线观看| 色婷婷激情| 日本成人电影资源网| 日本东京热久久久电影| 这里只有97精品| 免费网站观看www在线观| 4399成人黄A片| 八戒无码国产午夜福利| 亚洲风情在线观看| 日韩欧美蜜桃精品久久中文字幕久久| 欧美97视频| 亚州精品一区二区三区香中文字幕在线| 国产第12页| 欧美高清色| 亚洲怡春院| 性色乱AV一区二区| 91色综合激情| 日韩中文字幕熟妇人妻 | 综合天天网| 亚洲人成网www| 亚洲春色欧美激情自拍| 色亚洲欧美| 亚洲大色堂| 99999久久久久9国产精品| 色9999日韩国产| 粉嫩不卡一区二区性爱| 久久97| 九九九九免费高| 99re3这里只有精品| 五月激情天| 色噜噜人妻丝袜a∨先锋影| 丰满人妻一区二区三区四区| 欧美gv在线观看| 久九色| 久久久久九九九| 天天干夜夜鈤| 人人妻人人爱人人玩| 精品天堂| 思思热在线视频免费| 日本不卡二区| 少妇高潮流水av免费| 亚洲欧美999| 日本性感人妻91| 国产精品不卡高清在线观看| 91伊人久| 亚洲少妇中文字幕网址| 婷婷久久网| 9l视频自拍9l九色成人| 久操综合在线| 91福利网在线观看| 亚洲91在线播放影院| 91精品女厕偷拍视频| 久久黄色视频一区二区三区| 国产激情av女片自拍| 夜色AV无码手机在线影院| 操逼1区| 久热99| 99热这里只有精| 欧美狠狠弄| 青青草啪啪网| 97在线播放 | 好吊色综合| 欧美男人天堂| 丝袜熟女一区二区三区| 精品无码久久久| 精品一区二区三区四区女| 青青三级视频| 欧美成人性活片| 国产精品视频自拍在线| 思思热在线视频精品| 日本精品88888888| 色网亚洲人| 欧美成人一级麻豆| 怡红院一区二区熟女人妻| 国产女人高潮嗷嗷嗷叫小说| 精品超碰国产| 午夜天堂精品久久| 色狠狠一区二区三区香蕉| 人妻丝袜二区| 顶级丝袜熟女一区二区三区| 亚洲黄色| 中国一级操逼视频| 爽爽淫人网| 久啪| 国产白丝精品在线观看| 丁香色色网| 九X超碰| 999热这里只有精品| 97精品视频在线| 日本不卡三级网在线播放| 啊啊啊要高潮了| 日本在线999| 2024年最新色情网站在线观看| 蜜乳AV.COM| 婷婷色导航| 成人A片男人的天堂| 欧美性色欧美| 午夜精品探花| 欧美91网站| 三久久久四久久久久| 一线黄色免费性爱片| 色欧美天天| 欧美综合传媒| 伊人五月天激情| 日日天天久久啊啊aaa| 欧日韩一二三f区| 狠狠色噜噜狠狠狠狠狠色综合久久 | 941超碰| 中文字幕精品一区二| 成人婷婷丁香| 欲香欲色综合天天伊人| 亚洲成av人片色午夜乱码| 91久久久老司机| 日韩一区二区精彩视频| 日本一区二区电影网站| 久草加勒比一区在线| 欧美一级色| 亚洲激情欧美色图 | 大香蕉亚洲中文| 一区二区播放| 乱伦系列一区二区| 91N综合网| 色超碰综合| 999久久久免费精品国产牛牛| 噜噜噜狠狠色综合| 亚洲性高潮| 五月丁香啪啪网| AV女资源| 国产精品一区二区三区在线密挑| 久操国产在线| 欧美精品91| 三级日本一区二区三区| 澳门成人网站久国产日韩| 91亚洲综合| 久久天天摸| 国产精品女aA片爽爽视频| 激情五月综合网| 久久区| 97 亚洲 日韩 欧美 在线| 3PAV乱伦视频| 2026国产精品视频| 亚洲AV永久无码一区仙野| 2017,超碰| 九九热精品免费视频| 日韩啊V| 麻豆性爱视频在线播放| 啪啪资源网| 后入日本1234| 国产乱码久久| 天天操夜夜操狠很操| 99在线啪| 久久久久久久九九九九九九| 亚洲AV成人无码一二三久久| 日本不卡一区二区三区| 亚洲国产一级中文综合久久天堂在线免费观看| 亚洲春色欧美激情自拍| 精品人妻视频一区二区在线播放| 亚洲操操操| 国产一区二区三区高清视频| 日韩97视频| 五月丁香久久| av线电影| 欧美色图天堂在线| 午夜精品探花| 欧美夜夜草视频| 爱妻综合网| 91熟女熟妇视频网站| 少妇高潮流水av免费| 九九九只有精品| 少妇蜜汁| 色情综合| 思思热在线cao| 丰满熟女一区二区三区在线播放| 精人妻无码一区二区三区伊人直播| 国产剧情一区在线观看| 中日韩久久久| 国产1024在线播放| 草草草视频| 色网综合网| 国产视频三区四区| 91久久精品蜜臀| 天天色天天干天天射| 激情色图| 人妻丝袜一区二区三区在线| 亚洲国产精品久久久久婷婷老年| 99re这里只有精品3| **一级毛片国产| 亚洲第一精品在线视频| 欧美色www亚洲国产阿娇要播| 一区二区三区男人的天堂| 国产成人主播| 成人网欧美风情| 中文字幕老熟妇黄色视频| 黄片不用下载在线观看| 久久毛卡| 韩国成人精品久久久免费看| 性暴力欧美猛交在线直播| 午夜αv| 女人香蕉久久毛毛片精品| 日本九九久久99| 国产偷拍网站| 91亚洲色人| 欧洲黄色网| 麻豆精品一区二区三区四区免费观看| 国产精品成人午夜福利| 九九九偷拍| 欧美色亚洲色| 久久久久久久9| 欧美宗合网| 人妻娇喘 激情视频| 大香蕉在线SuP| 亚洲人精品午夜不卡| 精彩久久中文| 久射吧| 91在线国产后入风骚翘臀美女素人| 色网1| 青青草一区二区三区四| 日韩人人精品| 怡红院成人视频| 91性网| 亲子敌伦对白在线播放| 操操操五月天婷婷丁香影院| 欧美强奸乱能| 一区二区娱乐网站| 亚洲日韩一区电影| 99啪| 天天拍天| 97爱爱爱| 黄色在线网站| 国产日韩欧美三级片| 色情五月综合婷婷| 中文伊人大香蕉视频| 久久av色| 999熟女精品| 一二三四区电影| 日韩15p| 操婢日韩| 强奸乱亚洲| 男人的天堂在线有码| 亚洲 无码 偷拍| 国产成人精品必看 | 日韩人妻网站| 中文字幕一品色图| 国产午夜精品理论片一二三区区 | 亚洲精品国产av天美传媒| 久久精品高清无码一区| 熟女精品日韩一区二区三区| 级做a爱无码性色永久免费| 青娱乐亚洲自拍| 丁香五月激情综合| 内射卯月麻衣| 精品九九| 99精品成人免费看| 超碰天天久久79| 91久热| 国产无码精品成人| 五月婷视频| 国产一区麻豆免费观看| 国产三级中文字幕粉嫩| 亚洲 小说 欧美 激情 另类| 久久婷婷精品| 亚洲女人毛茸茸91| 日本狂喷奶水在线播放212| 色噜噜狠狠色综无码久久合欧美| 超碰97最新人妻| 60秒不遮不挡| 亚洲av强奸乱伦| 一区| 91精品国产91久久福利| 91丨九色丨东北熟女| 欧美日韩天堂| 综合av社区| 乱精品一区字幕二区| 乱操9999| 亚洲黄色a级片| 天天看特黄的免费网站| 一级性爱网| 99精品在线播放| 老鸭窝日丰县女人| 91久久精品中文字幕| 免费9 1久久| 中文字幕 人妻不满 在线视频| 亚洲综合69| A级毛片在线看免费| 中文高清一区二区的| 密臀成人视频久久久| 乱伦av麻豆| 亚洲精品蜜桃久久久久久久| 成人26uuu| 搡老女人老妇女老妇老熟女怎么读| 中国91AV| 人妻激情偷乱视频一区二区三区| 4tube欧美女厕所| 午夜欧美女人操逼| 亚洲极品| 中文字幕黄色片| 欧美高清91| 久久人妻精品| 欧美日韩在线视频网站| 日韩久久超碰色| 日本人妻伦在线中文字幕| 欧洲射精91| 日韩偷拍一区二区三区| 天天看高清麻豆| 亚洲无吗在线视频| 日本 情色 1区2区3区| 亚洲一区二区三区欧美日韩| 精品人妻一区二区三区蜜桃视频| 婷婷伊人网| 欧美高清第一页| 黄色二级片网站| 天天操人人操狠狠插| 久久综合女优| 国产小视频91| 大香蕉中文在线| 99.色网| 91在线超高颜值国产| 91久久国外网| 天天爽天天爽| 国产精品永久免费10000| 日韩精品怡红院| 睡产熟女乱伦| 另类图片综合| 久9久精品视频| 国产精品对白自产拍| 日韩性爱视频免费在线| 9久精品| 情色五月天网| 五月天激情四射| 日本影视久久免费| 超碰社区97| AV天天综合| 色嗨嗨在线| 亚洲天堂2020| 欧美亚洲高清晰| 97综合在线观看| 亚洲欧综合另类无码一区| 96超碰网| Aa东京男人的天堂| 一区二区三区四区五区高清无码永久视频| 久久一区二区高清免费| 夜色91| 欧美日韩中国x| 精品夜夜澡人妻无码| 色色香蕉| 操操操五月天婷婷丁香影院| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 370p日韩欧美亚洲精品| 亚洲丝袜少妇在线| 999九九九九国产动| 91人人看| 天天躁日日躁AAAXX| 国产三级资源在线观看| 欧成人精品H无码| 啊啊啊在线看| 四季AV一区二区凹凸精品小说| 亚洲最大无码中文字幕网站 | 欧美十八禁视频| 国产馆| 91亚洲欧美综合高清在线| 天天天肏屄欧美| 粉嫩国产精品久久粉嫩| 国产日韩欧美三级片| 精品亚州18| 老鸭窝亚洲毛片| 久久99网站| 96久久精品一二三区色欲| 欧美日韩啪啪电影| 草草草视频在线免费看| 91 丝袜在线播放| 美女啊啊啊啊啊| 午夜福利合集| 老鸭窝在线视频播放| 亚洲天堂资源| 日本好吊色视频| 无码人妻精品一区二区三区九九 | 毛片麻豆91糖心精品毛情片| 亚洲精品一卡二卡三卡福利视频网站| 香蕉一区二区三区在线视频 | 久久伊人最新网址视频| 人人操人人93| 午夜国产成人精品视频| 97精品一区二区视频| 久久伊人最新网址视频| 一级一性爱免费视频| 97碰| a亚洲欧美色欲| 无码动漫av中文字幕| 无码高清操逼| 国产精品视频自拍在线| 无码丰满熟妇一区二区浪潮AV| 影音先锋日本一区二区| 大学生口爆吞精| 97精品熟女少妇一区| 377p欧洲日本亚洲大胆| 日韩不卡av一二三| 天天日天天插| 99国产在线绯色一区| 中出789在线视频| 欧美一区二区三区成人性生活| 亚洲日韩东京热一区| 手机av亚洲丝袜美腿日韩第一页二页| 欧美色图片色哟哟| 97免费在线视频| 一级AV性爱| 色狠狠 - 百度| www.色操逼| 国产精品一区二区三区在线密挑| 精品无人区麻豆乱码久久久| 中文字幕超碰CAO| 久久亚州大香蕉| 超碰91在线| 91人妻最真实刺激绿帽| av天堂5| 久久,精品一二三| 久久视网78| 国产欧美日产一区二区三区 - 国产欧美日 | 日本欧美不卡| 在线岛国新天堂8| 亚洲精品人妻吞精av| 这里只有精品视频| 人人做天天爱| 国产精品自产拍在线观看社区| 又黄又爽在线观看视频| 国产精品丝袜久久亚洲不卡| 91性网| 女人被男人桶爽视频网站| 丁香五月激情综合国产| 亚熟在线| 国产精品久久久久久久久久久久久久吹 | 中文字幕精品一区欧美| 凹凸视频特色日本特黄| 校园春色综合色| 伊人欧美大香蕉视频| 免费看黄片现成| 亚洲精品亚洲人成人网| 亚洲精品1区| 欧美日韩1234| 国产精品电影| 天天天堂影视日韩亚洲91| 亚洲丝袜综合| 中文字幕日本久久| 九九九九精品一区| 日本羞羞的视频在线播放| 亚洲av无码成人精品国产| 试看福利| 午夜国产综合视频在线观看| 九月婷婷综合| 9997se| 天天谢天天干| 91av天美性媒精品视频| 久久久久久久性爱| 超碰AV在线| 肉丝中文无码高清| 免费公开人人操| 青青草十区九区爱夜| 亚洲国产97| 亚洲另类在线观看| 蜜汁欧美| 日韩啪啪网| 97 国产精品| 国产一区在线免费播放| 青草视频人妻在线观看| 香蕉久久AⅤ...| 久久偷拍人| A级片日韩欧美国产欧美视频精选观看| 六月丁香啪啪啪| 欧洲亚洲人妻无码久久三区四区| 5278欧美一区二区三区| 中文字幕精品日韩中文字幕| 乱理日韩中文| 国内毛片热久久思思热| 色九月综合| 91伊人久| 国产精品视频在线播放| 精品人妻av在线播放| 久久99草| 最新日韩黄片| 极品少妇久久久久| 农村妇女一级二级三级视频| 中欧人妻丝袜中文字幕| 色嘟嘟人妻天堂网| 婷婷色色五月天福利| 久久99手机免费视频| 国产精品视频自拍在线| 啊啊啊要高潮了| 精品v日韩欧美国产| 国产97在线播放| 婷婷色色五月| 日韩无码人妻| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 十八禁的黄污污免费网站| 欧洲亚洲人人爽爽视频| 色小视频蜜乳| 懂色aV一区二区天美传媒| 夜夜高潮夜夜爽高清视频一 | 国产白丝在线| 国产懂色精品国产av| 97资源站日韩| 麻豆AV96熟妇人妻| 日本一级性爱| 狠狠爱综合网| 中文字幕AV片| 桃色五月天| 国产精品懂色tv影视免费观看 | 国产精品久久久久久无码红治院| 久久久久久九九九九九九| 天天干天天拍| 免费无码国产精品v片在线观看| 国产精品在线一区二区| 日韩精品区二区三区不卡| 超碰精品国产无码| 亚洲激情欧美色图| 日韩AV中文字幕电影| 国产一区二区三区导航| 欧亚日韩中文在线| 国产情色在线| 不卡超碰护士AV在线免费播放| 超碰色男人操熟女| 天天综合青苹果| 国产精品密臀网在线观看| 91GD.COM| 91网亚洲| 无码日韩网站| 免费观看性欧美一级| 2017天天操天天日| 国产成人天堂| 中日无幕一二三四区| 亚洲一本大道中文字幕无码在线| 国产精品免费久久久久久久久久| 97超碰色中文字幕| 成人日本精品九区| 一区二区日韩欧美久久| 国产亚洲精品美女久久久m| 亚洲97在线| 欧美亚洲清纯| 久久九精品| 麻豆av一区二区三区| 极品极品色影院| 国产精品自拍xxxx| 99久久久久久亚洲精品不卡| www.91视频网| 亚洲AV色图一区| 美骚妇av高清在线| juliaann精品熟女一区| 日日爽夜夜爽| 六月色色| 超碰人妻在线| 女人爽到高潮潮喷18禁网站| 国产熟女完整版中字 | AV天堂丝袜| 人人摸人人干| 思思热在线| 91精品久久综合熟女| 久久久久国产精品喷潮免费观看臀 | 男人在线天堂| 天美91| 亚洲一二三四区| 91女日逼| 污色区网站| 国产深喉| 欧美色图97| 人人妻天天做天天爽| 麻豆性爱视频在线播放| 97视频网站在线观看| 久久五月份| 97综合在线观看| 91伊人大香蕉| 中文字幕女同在线| 北野未奈加勒比av| 亚洲玖玖爱| 97碰碰色| 国产成久久综合片| 午夜超爽| 久久高清欧美国产| 色九九综合| 啊啊啊操一区| 天天综合欧美综合| 任你干在线视频| 中文三一区| 99人妻碰碰碰久久久久禁片| 三级AV入口| 看一级黄色视频| 三级片大波波| 亚洲天天精品| 亚欧色图在线激情| 精品人体无圣光凹凸| 99久久婷婷国产综合| 亚洲日韩青青草色月| 超碰综合97在线| 国产精品成人AV片免费看网站| 涩涩这里只有精品视频| 女人精品内射国产99| 天天操天天射天天日| 99超碰网| 情侣操 逼视频99| 欧美亚洲丝袜美女电影| 亚洲AV无码黄色强奸| 欧美日韩国产人人| 18禁在线视频| 3571色综合一区二区二区| 久草电影网| 国内毛片无码一级毛片| 密臀视频三区免费网站| 精品成人亚洲午夜电影| 亚洲欧美国产其他二区| 欧美白嫩女HD| 熟妇高潮二区三区| 天天干18禁| 国产精品福利视频| 亚洲欧美97√| 99热这里都是精品| 国产精品黄色三级av| 97色色色| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 久久蜜桃一区二区| 无码操逼网| 欧美熟女妇同| 秋霞网—男女啪啪亚洲免费体验区 | 欧美天天综合网| 99ri视频| 性综合网| 伊蕉97蜜桃97狠狠综合干 | 久久一级无码精品毛片6| 久久99精品国产| 久操网视频| 99精品综合久久久久五月天| 精品国产精品一区二区| 九九九不卡| 91女网站| 成人网站 免费观看| www.成人无码| 亚洲欲色9532548967一区| 亚洲欧美另类激情小说| 美女高潮视频91| 2021久久国产综合精品青草 | 亚洲国产97| 91 亚洲情侣偷拍 久久| 91GD.COM| 九月激情婷婷| 另类小说欧美激情校园春色| 欧洲乱码一区二区| 国产熟女免费观看久久| 蜜臀久久99精品久久久| 99re这里| 亚洲国产欧美日韩人妻日中文| 人妻偷拍一区二区三区| 激情看片网站| 成人影院永久免费观看网址| 日本高清一区二区在线| 久久9精品视频| 97欧美色| 蜜桃视频成a人v在线| 99亚洲精品| 久久九九97| 人妻铁牛TV| 综合久久少妇中文字幕| 白丝av| 啊啊啊好想要| 亚欧成人综合影院| 婷婷午夜清品久久久久久久性色视频观| 中文伊人大香蕉视频| 高清国产成人无码| 夜夜骑夜夜操| 少妇一区二区三区在线观看| 亚洲av无码成人精品国产| 色欲人妻一区二区在线| 综合色色网| 日日碰狠狠添天天爽超| 五十路熟女人妻一区二区三区四区五| 激情五月婷| 亚洲?V高清一区二区三区尤物| 日本 欧美 国产一区| 亚洲久久天堂| 97在线免费看| 97在线免费| 日本天堂网| 福利操逼| 国产精品久久久久久久久久二区三区| 成人a级高清视频在线观看| 国产精品不卡一区二区三区| 操逼国产免费| 动漫片子网站3黄| 欧美激情一区| 无码99| 无码人妻精品一区二区三区99不卡| 国产九九九九九九九九| a片亚洲一本通视频| 干干干天天| 国产视频一区二区在线| 久久永久无码人妻视频| 好爽要喷了| 亚洲情色五月天| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 人人妻人人爽| 国产超碰在线| 九九九久久久| 成人五月天丁香激情综合| 亚洲 小说 欧美 激情 另类| 国产色呦呦| 国产欧美一区二区| 97 国产精品| 天天操人人操狠狠插| 99热91| 桃色人妻在线视频| 亚洲欧美色图小说| 人妻少妇蜜桃视频欧美一区| 亚州色图欧美| 在线观看不卡一区二区三区| av一区二区三区 中文| 欧美日韩天堂| 少妇熟女1区2区3区| 防屏蔽在线视频| 在线看污网站| 亚欧成人中文字幕一区| 久久深夜无码| 91精品久久久| 欧美性暴力猛交XXXX | 青娱乐欧美激情一区二区 | 久久久久9999| 裸体美女免费看网站青草| 综合情欲网| 综合色啪| 精品国产乱码久久久| 国产无套粉嫩白浆在| 欧美日韩系列| 久久大香蕉| 91性色| 久久只有精品一区二区三区| 综合伊人网12色| 亚洲色图国产另类| 日欧亚洲二三区大片不卡| 日韩八十路老熟女| 五月婷婷爱六月丁香色| 久久九色| 伊人玖玖网| 99热在线观看| 天美传媒AV在线播放| 九九热五区| av凤凰久久久| 欧美另类色图片| 亚洲国产日韩精品久久久| 久操视频在线| 亚洲天堂2020| 91久久免费视频互動交流| 韩三级a视频在线观看| 琪琪精品免费一区二区三区| 先锋激情∨在线视频播放| 秋霞一级鲁丝片A片| 亚洲蜜臀精品视频久久| 久热久操| 闷骚老熟女15P| 中文字幕大片三级狠狠干| 五月天黄色激情视频| 亚洲日本激情| 国产综合在线视频网站| 蜜臀av网址| 成人短视频在线观看| 看大黄色大片原件| 丁香婷婷激情五月天无毒不卡| ji熟女.com| 狠狠操狠狠操操| 欧美高清91| 久久久精品九| 亚洲另类在线观看| 青青草久草| 欧美se亚洲| 久久91精品国产9丨久久分亭| 男女激情中文字幕| 热99这里有精品综合久久 | 亚洲日韩美女中文字幕乱| 97在线播放 | 亚洲欧洲综合| 少好三P| 亚洲麻豆18发?| 中文字幕无码不卡啪啪| 黄色av播放免不| 亚洲一二三四区在线免费看视频| 嗯嗯啊啊好疼| 亚洲天天影视综合网| 熟妇高潮精品一区二区三区下载| 日韩欧美水蜜桃人妻| 中出后入| 成人无码欧美一级A片狼牙直播| 熟女熟妇一区二区三区视频| 男人的天堂日韩| 美女好片色日本| 精品午夜福利导航| 亚洲好看强奸乱伦| 黄网色一区二区三区四区精品| 噜噜噜无码AV一级一级久久影院| 婷婷久月| 性色高清在线| 国产精品毛片| 91处女在线观看| 午夜爽爽爽在线观看永久入口姬片| 国产吞精a级片激情电影| 婷婷激情啪啪| 久操视频免费观看| 校园激情狠狠四射| 7777奇米影视久久| 久久久久久人妻| 欧美72网页| 久久东京热久久| 五月天丁香婷婷综合网站| 中文字幕老熟妇黄色视频| 欲射影视| 狠狠久久手机视频精品| 十八禁视频网站| 亚洲和欧美裸体美女双飞视频| 日韩9区| 蜜乳AV色欲AVAV无码| 黄资源| 三级日韩一区二区三区| 狠狠综合| rion磁力链接| 亚洲熟女中文字幕在线| 超碰98综合网| 91精品国产日韩欧美综合| 久久九七| 激情五月天色色| 黑人娇小av在线播放 | 狠狠夜色午夜久久综合在线| 91|九色|国产熟女| 高清无码一区二区三区| 国产精品久久久久久久久久久久| 欧美78| 色香色欲天天综合网天天来吧| 青青草精品| 国产亚洲色停停久久99精品91| a网站免费观看| 另类图片天天影视| 色性综合| 97精品一区二区视频| 欧美少妇第一页| 一级片视频啪啪| 国产伦精品一区二区三区在线观| 九九人妻| 手机看av网站在线看| 青青伊人这里只有精品| 毛片17S| 91操人| 久久大香蕉97| 国产少妇肉丝在线观看| 五月天亚洲色图| 午夜激情床戏激情| 国产精品爽爽v| 91女日逼| 久久大陆| 亚洲男人的天堂亚洲| 国产操伦| 伊人91| 青操影院| 久久嫩草国产成人一区| 欧美人妻久久精品二区三区| 极品色综合| 久久精品99久久久久久| 中文字幕91综合| 国产av美女被艹的乱叫| 精品国产乱码久久久久久网站入口| 躁躁日曰躁2020| 欧美日韩超碰在线| 国产人妻天天干精品| 91性高朝久久久久久久久| 青娱乐黄色录像| 大香蕉青青9| 99色婷婷中文字幕乱色| 欧美美女啪啪视频| 人妻久久久| 天天插天天操| 凹凸视频在线观看伊人| 翔田千里Av在线| 在线αⅴ| 蜜乳AV.COM| 91丨九色丨国产丨人妻在线| 人妻三级在线中文字幕| 激情婷婷黑人91| 怡红院亚洲怡春院av| 欧美性猛交美女自慰91| 欧美一区二区三区四区综合| 蜜臀99久久精品| 亚洲少妇色| 国产黄色在线播放观看| 青青草中日韩在线| 国产日本熟女顶级一区二区三区视频| 欧美夜夜| 日本媚薬中文字幕在线| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 欧美日日网| 久久免费老司机精品| 超碰 另类 欧美| 亚洲限制级| 欧美伦乱| 天天看天天日天天操| 欧美第一页| 再深点灬舒服灬太大了添视频| 国产精品探花视频| 五月丁香六月婷| 国产九九久久久精品| 精品视频久久区| 久久高潮妇女视频| 日本性爰一道本| 超碰99热| 日韩不卡网操逼中文字幕日韩| 综合情欲网| 影音先锋日本一区二区| 日韩黄色一区二区三区| 男人的天堂在线2| 久久久精品一区二区| 日本精品一区二区三区四区的功能| 上海一级黄片| 久操高青| 亚洲精品97p| 久久久久久久国产视频| 天美传媒国产原创中文字幕亚洲欧美另类 | 天天影视综合网欧美精品| 噜噜噜久久亚洲精品色情| 1240青青草一区二区三区视频天爱 | 五月丁香婷婷啪啪| 久久精品夜色国产亚洲AV| 97亚洲精品| 天美国产精品| 亚洲色电影在线| 天天插天天操| 欧美草草高清日韩视频| 特级毛片特黄久久免费看| 欧美美女在线高潮999| a级免费在线观看| 色欧美天天| 九九碰九九爱97超| 欧美亚性天堂| 91香蕉国产尤物视频| 久久一二三四五六七八九区区区 | 色五月婷婷在线| 国产嫩草精品A88AV| 色婷婷电影网| 97天天操| 蜜臀av在线播放一区二区三区| 久久9久久| 超碰久久中文| av一区二区三区四区| 欧美综合 站| 天美传媒国产原创中文字幕亚洲欧美另类 | 精品少妇高潮久久| 人妻熟女午夜精品在线| 欧美亚洲手机在线| 综精品久久久aaaa| 国产精品探花色| 色色青青久久| 在线只有精品| A级在线视频| 青青草五月天| 三级三级三级日本99| 欧美高清18A片| 久操 高清| 99色色网| 97亚洲综合影院| 宗合情欲网| a片久久久久久久久久久久 | 欧美偷| 91被操| 校园春色综合| 成人久久久精品| 青青草天天亲夜夜操网| 蜜屁av| 日韩三级在线观看mp4| 日人妻视频91| 精品人妻免费观看| 99热这里只有精品1| 色情亚洲日本成人| 久久精品一区二区三区不卡| av天堂天堂av日韩| 天天做天天爱夜夜爽毛片试看| julia ann久久| 91欧美丨精品丨入口| 蜜桃久久久久久久| 国产又粗又又黄又猛| 久久99亚洲精品久久99果| 午夜福利一区二区影院| 激情文学88| 欧美天天干| 欧美+日产+中文| 黄页av| 久久黄人人爽视频| 这里只有97精品|