日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

Netty實(shí)時(shí)AI語(yǔ)音交互:讓Live2D NPC聽懂玩家說(shuō)話

Netty實(shí)時(shí)AI語(yǔ)音交互:讓Live2D NPC聽懂玩家說(shuō)話 游戲內(nèi) NPC 只會(huì)復(fù)讀固定臺(tái)詞、對(duì)話選項(xiàng)永遠(yuǎn)只有兩三個(gè)、語(yǔ)音觸發(fā)靠按鍵……這些體驗(yàn)放在十年前還能接受放到今天玩家已經(jīng)明顯感覺到“出戲”。如果把大語(yǔ)言模型、實(shí)時(shí)語(yǔ)音識(shí)別、語(yǔ)音合成和 Live2D 形象結(jié)合起來(lái)接入到 GTA 這類開放世界游戲里讓 NPC 真正“聽懂”玩家說(shuō)的話并且用自然語(yǔ)音即時(shí)回應(yīng)整個(gè)游戲玩法會(huì)變得完全不一樣。這篇教程會(huì)圍繞“AI 語(yǔ)音全面接管 GTA 玩法”這個(gè)場(chǎng)景拆解一套可落地的實(shí)時(shí) AI 語(yǔ)音交互系統(tǒng)。我們會(huì)重點(diǎn)講清楚兩個(gè)核心模塊一個(gè)是Netty 框架在實(shí)時(shí) AI 語(yǔ)音模塊中的傳輸設(shè)計(jì)另一個(gè)是如何給 AI 設(shè)置 Live2D 形象、背景和語(yǔ)音。整個(gè)方案包含架構(gòu)設(shè)計(jì)、代碼示例、運(yùn)行驗(yàn)證和排錯(cuò)思路適合對(duì)語(yǔ)音交互、Netty 長(zhǎng)連接、LLM 接入感興趣的后端開發(fā)者也適合想自己做游戲 NPC 語(yǔ)音助手的開發(fā)者參考。1. 背景與核心概念1.1 AI 語(yǔ)音在開放世界游戲中的價(jià)值GTA 這類開放世界游戲最大的魅力在于“自由”。但目前的自由更多體現(xiàn)在地圖和任務(wù)路線上NPC 對(duì)話仍然是非常機(jī)械的。玩家對(duì)著麥克風(fēng)喊一句“帶我去最近的加油站”NPC 大概率不會(huì)理你玩家問(wèn) NPC“你叫什么名字”得到的也往往是預(yù)設(shè)好的幾段錄音。AI 語(yǔ)音全面接管游戲交互后能做到的事情就多了玩家通過(guò)麥克風(fēng)直接和 NPC 對(duì)話不依賴預(yù)設(shè)選項(xiàng)。NPC 根據(jù)上下文理解玩家意圖動(dòng)態(tài)生成回應(yīng)內(nèi)容。語(yǔ)音識(shí)別、語(yǔ)義理解、語(yǔ)音合成全鏈路實(shí)時(shí)完成延遲控制在可接受范圍。NPC 擁有 Live2D 形象說(shuō)話時(shí)嘴唇、表情、動(dòng)作和語(yǔ)音同步視覺上更接近真人互動(dòng)。這套能力不僅能用于 GTA也能遷移到其他游戲、虛擬主播、數(shù)字人客服、元宇宙展廳等場(chǎng)景。底層技術(shù)鏈路是相通的音頻采集 → 實(shí)時(shí)傳輸 → 語(yǔ)音識(shí)別 → 語(yǔ)義理解 → 內(nèi)容生成 → 語(yǔ)音合成 → 形象驅(qū)動(dòng)。1.2 從“按鍵對(duì)話”到“語(yǔ)音接管”傳統(tǒng)游戲?qū)υ捔鞒掏婕野聪掳存I → 彈出對(duì)話選項(xiàng) → 玩家選擇 → 播放預(yù)設(shè)語(yǔ)音/文本AI 語(yǔ)音接管后的對(duì)話流程玩家直接說(shuō)話 → 音頻流實(shí)時(shí)上傳 → ASR 識(shí)別成文本 → LLM 理解并生成回復(fù) → TTS 合成語(yǔ)音 → 音頻流實(shí)時(shí)下發(fā) → Live2D 形象同步播放語(yǔ)音和口型兩者的本質(zhì)區(qū)別在于傳統(tǒng)方案是“有限狀態(tài)機(jī)”AI 方案是“無(wú)限生成式交互”。玩家的每句話都可能得到不同的回應(yīng)NPC 的“性格”也可以通過(guò) Prompt 來(lái)設(shè)定這就能實(shí)現(xiàn)真正意義上的玩法顛覆。1.3 實(shí)時(shí) AI 語(yǔ)音模塊為什么需要 Netty實(shí)時(shí) AI 語(yǔ)音交互和普通的 HTTP 請(qǐng)求-響應(yīng)模式不同。玩家說(shuō)話是持續(xù)產(chǎn)生音頻幀的服務(wù)端也需要邊識(shí)別邊返回中間結(jié)果如果用 HTTP 輪詢延遲會(huì)非常高而且連接管理、斷線重連、心跳?;疃家约簩?shí)現(xiàn)非常痛苦。Netty 是一個(gè)基于 Java NIO 的高性能網(wǎng)絡(luò)通信框架擅長(zhǎng)處理大量長(zhǎng)連接和實(shí)時(shí)雙向通信。用在實(shí)時(shí) AI 語(yǔ)音模塊里Netty 主要承擔(dān)以下職責(zé)維持客戶端與服務(wù)端的 WebSocket/TCP 長(zhǎng)連接。接收客戶端持續(xù)上傳的音頻二進(jìn)制幀。將服務(wù)端生成的識(shí)別中間文本、LLM 回復(fù)、合成音頻幀實(shí)時(shí)推送給客戶端。支持心跳檢測(cè)、斷線重連、并發(fā)連接管理。選擇 Netty 而不是直接用原生 Socket原因是 Netty 幫你封裝好了線程模型、編解碼器、粘包拆包、斷線重連、流量控制等底層細(xì)節(jié)開發(fā)效率高很多。2. 總體架構(gòu)設(shè)計(jì)2.1 系統(tǒng)模塊劃分整個(gè) AI 語(yǔ)音接管系統(tǒng)可以拆成 5 個(gè)模塊模塊職責(zé)技術(shù)選型示例客戶端采集與播放采集麥克風(fēng)音頻、播放服務(wù)端返回的音頻Web 瀏覽器、Unity、Android/iOS實(shí)時(shí)傳輸層維持長(zhǎng)連接傳輸音頻幀和消息NettyWebSocket/TCP語(yǔ)音識(shí)別 ASR將音頻流轉(zhuǎn)成文本訊飛、阿里云、Whisper 等語(yǔ)義理解與生成 LLM根據(jù)對(duì)話上下文生成 NPC 回復(fù)GPT、通義千問(wèn)、本地部署模型語(yǔ)音合成 TTS將回復(fù)文本轉(zhuǎn)成自然語(yǔ)音Edge TTS、訊飛 TTS、Azure TTS形象驅(qū)動(dòng)控制 Live2D 模型的嘴型、表情、動(dòng)作Live2D Cubism SDK、Web 前端 Canvas2.2 實(shí)時(shí)交互流程簡(jiǎn)化后的流程如下玩家按下麥克風(fēng)按鈕開始說(shuō)話或設(shè)置語(yǔ)音喚醒。客戶端采集音頻按 20ms60ms 一幀打包通過(guò) Netty 長(zhǎng)連接發(fā)送到服務(wù)端。服務(wù)端收到音頻幀后轉(zhuǎn)發(fā)給 ASR 引擎做流式識(shí)別。ASR 返回中間結(jié)果服務(wù)端將中間文本推送給客戶端做展示。玩家說(shuō)完一句話靜音檢測(cè)服務(wù)端將完整文本交給 LLM。LLM 生成 NPC 回復(fù)文本服務(wù)端將文本傳給 TTS。TTS 返回合成音頻服務(wù)端通過(guò) Netty 將音頻幀推送給客戶端??蛻舳瞬シ乓纛l同時(shí)驅(qū)動(dòng) Live2D 形象播放對(duì)應(yīng)口型和表情。2.3 為什么把 Netty 放在“中間層”有人會(huì)問(wèn)客戶端為什么不直接連 ASR 或 LLM 服務(wù)原因有三點(diǎn)密鑰安全ASR、LLM、TTS 的 API Key 放在服務(wù)端不暴露給客戶端。統(tǒng)一協(xié)議客戶端只需要維護(hù)一種連接協(xié)議不需要關(guān)心服務(wù)端接入了哪家 ASR、哪個(gè) LLM、哪個(gè) TTS??蓴U(kuò)展性服務(wù)端可以隨時(shí)替換或增加 AI 能力客戶端無(wú)感知。所以Netty 在這一整套系統(tǒng)里扮演的是“AI 語(yǔ)音網(wǎng)關(guān)”的角色連接了客戶端和多個(gè) AI 服務(wù)。3. 環(huán)境準(zhǔn)備與項(xiàng)目結(jié)構(gòu)3.1 開發(fā)環(huán)境說(shuō)明本文的示例以 Java 后端為主版本信息如下。實(shí)際開發(fā)時(shí)請(qǐng)根據(jù)你的項(xiàng)目環(huán)境調(diào)整版本重點(diǎn)是理解實(shí)現(xiàn)思路。環(huán)境版本建議JDK8 或 11 及以上Maven3.6 及以上Netty4.1.xSpring Boot2.7.x 或 3.x可根據(jù)需要選WebSocket 協(xié)議RFC 6455前端頁(yè)面Vue 3 / 原生 JavaScript Live2D SDK說(shuō)明Netty 4.1.x 是目前最常用的穩(wěn)定版本本文示例代碼不依賴 Spring Boot 也能獨(dú)立運(yùn)行你可以直接用 Maven 啟動(dòng)一個(gè) Java 類來(lái)測(cè)試。3.2 項(xiàng)目整體結(jié)構(gòu)ai-voice-gta-demo ├── pom.xml ├── src/main/java/com/example/aivoice │ ├── server │ │ ├── VoiceServer.java // Netty 服務(wù)端啟動(dòng)類 │ │ ├── VoiceServerInitializer.java │ │ └── VoiceServerHandler.java // 核心消息處理 │ ├── client │ │ ├── VoiceClient.java // Netty 客戶端模擬游戲端 │ │ └── VoiceClientHandler.java │ ├── audio │ │ ├── AudioFrameCodec.java // 音頻幀編解碼 │ │ └── AudioConfig.java │ ├── ai │ │ ├── AsrService.java // 語(yǔ)音識(shí)別服務(wù) │ │ ├── LlmService.java // 大模型對(duì)話服務(wù) │ │ └── TtsService.java // 語(yǔ)音合成服務(wù) │ └── live2d │ ├── Live2dConfig.java // Live2D 形象配置 │ └── Live2dMessage.java // 表情/嘴型消息 └── web ├── index.html // 前端測(cè)試頁(yè)面 └── js/live2d/下面我們按照模塊逐步實(shí)現(xiàn)。4. Netty 實(shí)時(shí) AI 語(yǔ)音模塊實(shí)現(xiàn)關(guān)于“netty框架用在實(shí)時(shí)的ai語(yǔ)音模塊”這個(gè)方向網(wǎng)上討論不多很多開發(fā)者會(huì)直接拿 WebSocket 糊一層就算了。但實(shí)際上Netty 在處理高并發(fā)長(zhǎng)連接、音頻幀有序傳輸、半包粘包、心跳保活這些細(xì)節(jié)上優(yōu)勢(shì)非常明顯。下面我們直接寫代碼。4.1 添加 Maven 依賴在pom.xml中加入 Netty 依賴dependencies dependency groupIdio.netty/groupId artifactIdnetty-all/artifactId version4.1.100.Final/version /dependency dependency groupIdcom.alibaba.fastjson2/groupId artifactIdfastjson2/artifactId version2.0.40/version /dependency dependency groupIdorg.slf4j/groupId artifactIdslf4j-api/artifactId version1.7.36/version /dependency /dependenciesnetty-all已經(jīng)包含了 Netty 的核心、編解碼器、WebSocket、HTTP 等模塊開發(fā)調(diào)試比較方便。生產(chǎn)環(huán)境可以根據(jù)實(shí)際需要只引入netty-transport、netty-codec-http、netty-handler等子模塊減小體積。4.2 Netty 服務(wù)端啟動(dòng)類創(chuàng)建一個(gè) Netty 服務(wù)端監(jiān)聽 8080 端口使用 WebSocket 協(xié)議接收客戶端音頻幀。// 文件路徑src/main/java/com/example/aivoice/server/VoiceServer.java package com.example.aivoice.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; public class VoiceServer { private final int port; public VoiceServer(int port) { this.port port; } public void start() throws InterruptedException { EventLoopGroup bossGroup new NioEventLoopGroup(1); EventLoopGroup workerGroup new NioEventLoopGroup(); try { ServerBootstrap bootstrap new ServerBootstrap(); bootstrap.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 1024) .childOption(ChannelOption.TCP_NODELAY, true) .childOption(ChannelOption.SO_KEEPALIVE, true) .childHandler(new VoiceServerInitializer()); ChannelFuture future bootstrap.bind(port).sync(); System.out.println(AI 語(yǔ)音服務(wù)端啟動(dòng)成功端口 port); future.channel().closeFuture().sync(); } finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } public static void main(String[] args) throws InterruptedException { new VoiceServer(8080).start(); } }這里有幾個(gè)點(diǎn)需要說(shuō)明bossGroup負(fù)責(zé)接受客戶端連接線程數(shù)設(shè)置為 1 就夠因?yàn)樗娜蝿?wù)只是接受連接并轉(zhuǎn)發(fā)給 worker。workerGroup負(fù)責(zé)處理每個(gè)連接的讀寫操作默認(rèn)線程數(shù)為 CPU 核心數(shù) × 2。SO_BACKLOG表示等待連接的隊(duì)列長(zhǎng)度1000 是常見配置。TCP_NODELAY設(shè)為 true 可以禁用 Nagle 算法降低小音頻幀的傳輸延遲這對(duì)實(shí)時(shí)語(yǔ)音非常重要。4.3 初始化器與消息處理接下來(lái)是初始化器把 WebSocket 相關(guān)的編解碼器加到 Pipeline 中。// 文件路徑src/main/java/com/example/aivoice/server/VoiceServerInitializer.java package com.example.aivoice.server; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpServerCodec; import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler; import io.netty.handler.timeout.IdleStateHandler; public class VoiceServerInitializer extends ChannelInitializerSocketChannel { Override protected void initChannel(SocketChannel ch) { ChannelPipeline pipeline ch.pipeline(); // HTTP 編解碼器用于 WebSocket 握手 pipeline.addLast(new HttpServerCodec()); pipeline.addLast(new HttpObjectAggregator(65536)); // WebSocket 協(xié)議處理器path 為 /voice pipeline.addLast(new WebSocketServerProtocolHandler(/voice)); // 心跳檢測(cè)60 秒內(nèi)沒有讀事件則觸發(fā) IdleStateEvent pipeline.addLast(new IdleStateHandler(60, 0, 0)); // 核心業(yè)務(wù)處理器 pipeline.addLast(new VoiceServerHandler()); } }IdleStateHandler在這里的作用是心跳檢測(cè)。如果客戶端 60 秒內(nèi)沒有發(fā)送任何數(shù)據(jù)服務(wù)端會(huì)觸發(fā)IdleStateEvent我們可以在處理器里關(guān)閉這個(gè)無(wú)效連接避免僵尸連接占用資源。4.4 核心消息處理器VoiceServerHandler是整個(gè) Netty 模塊里最關(guān)鍵的類。它負(fù)責(zé)接收客戶端音頻幀、調(diào)用 ASR/LLM/TTS 服務(wù)、把結(jié)果推回客戶端。為了演示清晰我把 ASR、LLM、TTS 的方法先以接口形式寫好具體對(duì)接不同廠商時(shí)再替換實(shí)現(xiàn)。// 文件路徑src/main/java/com/example/aivoice/server/VoiceServerHandler.java package com.example.aivoice.server; import com.alibaba.fastjson2.JSONObject; import com.example.aivoice.ai.AsrService; import com.example.aivoice.ai.LlmService; import com.example.aivoice.ai.TtsService; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; import io.netty.handler.codec.http.websocketx.BinaryWebSocketFrame; import io.netty.handler.codec.http.websocketx.WebSocketFrame; import io.netty.handler.timeout.IdleStateEvent; public class VoiceServerHandler extends SimpleChannelInboundHandlerWebSocketFrame { private final AsrService asrService new AsrService(); private final LlmService llmService new LlmService(); private final TtsService ttsService new TtsService(); // 用于緩存當(dāng)前連接上的音頻片段 private StringBuilder currentText new StringBuilder(); Override protected void channelRead0(ChannelHandlerContext ctx, WebSocketFrame frame) { if (frame instanceof BinaryWebSocketFrame) { // 處理客戶端上傳的音頻二進(jìn)制幀 BinaryWebSocketFrame binaryFrame (BinaryWebSocketFrame) frame; byte[] audioData new byte[binaryFrame.content().readableBytes()]; binaryFrame.content().readBytes(audioData); handleAudioFrame(ctx, audioData); } else if (frame instanceof TextWebSocketFrame) { // 處理客戶端發(fā)送的文本消息例如開始說(shuō)話、結(jié)束說(shuō)話 TextWebSocketFrame textFrame (TextWebSocketFrame) frame; handleTextMessage(ctx, textFrame.text()); } } private void handleAudioFrame(ChannelHandlerContext ctx, byte[] audioData) { // 將音頻片段送入 ASR 服務(wù)獲得中間識(shí)別結(jié)果 String partialText asrService.recognizePartial(audioData); // 如果有中間結(jié)果推送給客戶端做臨時(shí)展示 if (partialText ! null !partialText.isEmpty()) { JSONObject msg new JSONObject(); msg.put(type, asr_partial); msg.put(text, partialText); ctx.channel().writeAndFlush(new TextWebSocketFrame(msg.toJSONString())); } } private void handleTextMessage(ChannelHandlerContext ctx, String text) { JSONObject json JSONObject.parseObject(text); String type json.getString(type); if (end_of_speech.equals(type)) { // 玩家說(shuō)完話調(diào)用 LLM 生成回復(fù) String userText json.getString(text); String reply llmService.generateReply(userText); // 將回復(fù)文本轉(zhuǎn)成語(yǔ)音 byte[] ttsAudio ttsService.synthesize(reply); // 推送回復(fù)文本 JSONObject textMsg new JSONObject(); textMsg.put(type, npc_reply_text); textMsg.put(text, reply); ctx.channel().writeAndFlush(new TextWebSocketFrame(textMsg.toJSONString())); // 推送合成音頻幀 ctx.channel().writeAndFlush(new BinaryWebSocketFrame( io.netty.buffer.Unpooled.wrappedBuffer(ttsAudio) )); } } Override public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { if (evt instanceof IdleStateEvent) { // 空閑超時(shí)關(guān)閉連接 System.out.println(連接空閑超時(shí)關(guān)閉連接: ctx.channel().remoteAddress()); ctx.close(); } else { super.userEventTriggered(ctx, evt); } } Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { cause.printStackTrace(); ctx.close(); } }這里做了一些簡(jiǎn)化把“流式識(shí)別”和“流式合成”的細(xì)節(jié)屏蔽了。實(shí)際項(xiàng)目中ASR 的流式識(shí)別可能是一邊接收音頻一邊輸出中間文本TTS 也是一邊生成音頻一邊下發(fā)你需要把這些能力封裝到對(duì)應(yīng) Service 中。4.5 Netty 客戶端示例為了方便測(cè)試再寫一個(gè) Netty 客戶端。它模擬游戲端采集音頻后推送到服務(wù)端然后接收服務(wù)端的回復(fù)。// 文件路徑src/main/java/com/example/aivoice/client/VoiceClient.java package com.example.aivoice.client; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.http.DefaultHttpHeaders; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.websocketx.WebSocketClientHandshakerFactory; import io.netty.handler.codec.http.websocketx.WebSocketVersion; import java.net.URI; public class VoiceClient { public static void main(String[] args) throws Exception { URI uri new URI(ws://localhost:8080/voice); EventLoopGroup group new NioEventLoopGroup(); try { HttpHeaders headers new DefaultHttpHeaders(); WebSocketClientHandshakerFactory.newHandshaker( uri, WebSocketVersion.V13, null, true, headers ); Bootstrap bootstrap new Bootstrap(); bootstrap.group(group) .channel(NioSocketChannel.class) .handler(new VoiceClientInitializer(uri)); Channel channel bootstrap.connect(uri.getHost(), uri.getPort()).sync().channel(); System.out.println(語(yǔ)音客戶端連接成功輸入文字模擬玩家說(shuō)話); // 控制臺(tái)輸入模擬玩家說(shuō)話內(nèi)容 java.io.BufferedReader reader new java.io.BufferedReader( new java.io.InputStreamReader(System.in) ); while (true) { String line reader.readLine(); if (line null || quit.equalsIgnoreCase(line)) { break; } // 發(fā)送“結(jié)束說(shuō)話”消息 com.alibaba.fastjson2.JSONObject msg new com.alibaba.fastjson2.JSONObject(); msg.put(type, end_of_speech); msg.put(text, line); channel.writeAndFlush( new io.netty.handler.codec.http.websocketx.TextWebSocketFrame(msg.toJSONString()) ); } channel.close().sync(); } finally { group.shutdownGracefully(); } } }客戶端初始化器和服務(wù)端類似這里不再重復(fù)。通過(guò)這個(gè)簡(jiǎn)單的客戶端我們可以在沒有真實(shí)麥克風(fēng)的情況下用控制臺(tái)輸入文本來(lái)測(cè)試服務(wù)端鏈路。5. AI 服務(wù)封裝ASR、LLM、TTSNetty 只是傳輸層真正的“AI 大腦”在 ASR、LLM、TTS 這三個(gè)服務(wù)里。下面我們以接口形式封裝方便你替換成任意廠商的 SDK。5.1 ASR 語(yǔ)音識(shí)別服務(wù)ASRAutomatic Speech Recognition自動(dòng)語(yǔ)音識(shí)別負(fù)責(zé)把音頻轉(zhuǎn)成文本。不同廠商的 SDK 差異很大這里提供一個(gè)統(tǒng)一的封裝接口// 文件路徑src/main/java/com/example/aivoice/ai/AsrService.java package com.example.aivoice.ai; public class AsrService { /** * 識(shí)別音頻片段返回中間結(jié)果 */ public String recognizePartial(byte[] audioData) { // 此處對(duì)接具體的 ASR SDK例如訊飛流式識(shí)別、阿里云錄音文件識(shí)別 // 示例中直接返回模擬結(jié)果 return ; } /** * 識(shí)別完整音頻返回最終文本 */ public String recognizeFinal(byte[] fullAudioData) { // 對(duì)接具體 ASR SDK return 帶我去最近的加油站; } }如果使用云端 ASR通常要維護(hù)一個(gè)會(huì)話 ID把同一段話的多個(gè)音頻片段發(fā)送給同一個(gè)識(shí)別會(huì)話。流式識(shí)別一般會(huì)回調(diào)多個(gè)中間結(jié)果你可以在回調(diào)里把結(jié)果通過(guò) Netty 推給前端展示。// 偽代碼示例使用 WebSocket 回調(diào)接收 ASR 中間結(jié)果 public void startStreamingAsr(ChannelHandlerContext ctx, String sessionId) { asrSdk.startStreaming(sessionId, new AsrCallback() { Override public void onPartialResult(String text) { JSONObject msg new JSONObject(); msg.put(type, asr_partial); msg.put(text, text); ctx.channel().writeAndFlush(new TextWebSocketFrame(msg.toJSONString())); } Override public void onFinalResult(String text) { JSONObject msg new JSONObject(); msg.put(type, asr_final); msg.put(text, text); ctx.channel().writeAndFlush(new TextWebSocketFrame(msg.toJSONString())); } }); }5.2 LLM 對(duì)話生成服務(wù)LLM 服務(wù)負(fù)責(zé)根據(jù)玩家的話生成 NPC 回復(fù)。為了讓 NPC 更像游戲角色我們需要在 Prompt 里設(shè)定 NPC 的性格、背景、說(shuō)話方式。// 文件路徑src/main/java/com/example/aivoice/ai/LlmService.java package com.example.aivoice.ai; public class LlmService { private String npcPersona 你是 GTA 洛圣都的一名出租車司機(jī)性格豪爽; public String generateReply(String userText) { // 構(gòu)造帶 NPC 人設(shè)的 prompt String prompt npcPersona 說(shuō)話簡(jiǎn)短、地道偶爾帶一點(diǎn)幽默。 玩家對(duì)你說(shuō) userText \n 請(qǐng)用一句話回復(fù)。; // 調(diào)用大模型接口例如 OpenAI、通義千問(wèn)、本地 Ollama String reply callLlmApi(prompt); return reply; } private String callLlmApi(String prompt) { // 這里用 HTTP 調(diào)用大模型接口或者調(diào)用本地模型 SDK // 示例直接返回固定文本 return 上車吧朋友五分鐘就到坐穩(wěn)了; } }如果要在游戲里實(shí)現(xiàn)“NPC 記憶”可以把歷史對(duì)話保存到內(nèi)存或 Redis 里把最近的幾輪對(duì)話一起放進(jìn) Prompt這樣 NPC 就能記住玩家剛才說(shuō)過(guò)的話。5.3 TTS 語(yǔ)音合成服務(wù)TTSText To Speech語(yǔ)音合成負(fù)責(zé)把回復(fù)文本變成語(yǔ)音。合成的音頻數(shù)據(jù)可以直接通過(guò) Netty 的BinaryWebSocketFrame推給客戶端。// 文件路徑src/main/java/com/example/aivoice/ai/TtsService.java package com.example.aivoice.ai; public class TtsService { /** * 將文本合成為音頻字節(jié)數(shù)組返回 PCM/WAV/MP3 格式 */ public byte[] synthesize(String text) { // 調(diào)用 TTS SDK例如 Edge TTS、訊飛 TTS、Azure TTS // 示例直接返回一個(gè)模擬音頻 return new byte[0]; } }實(shí)際工程中要注意音頻格式的統(tǒng)一。建議統(tǒng)一使用 16kHz 單聲道 16bit PCM 格式這樣 Netty 傳輸時(shí)不用頻繁轉(zhuǎn)換格式。如果使用 MP3 等壓縮格式需要在客戶端解碼后再播放。6. 給 AI 設(shè)置 Live2D 形象、背景和語(yǔ)音“怎么給 AI 設(shè)置 Live2D 形象背景和語(yǔ)音”是另一個(gè)高頻問(wèn)題。這個(gè)問(wèn)題的本質(zhì)是后端已經(jīng)打通了 AI 語(yǔ)音鏈路前端如何讓一個(gè) Live2D 角色“活”起來(lái)。6.1 Live2D 是什么Live2D 是一種 2D 動(dòng)畫技術(shù)通過(guò)切割和變形 2D 原畫讓角色產(chǎn)生轉(zhuǎn)頭、眨眼、說(shuō)話、呼吸等動(dòng)作。和 3D 模型相比Live2D 更輕量適合虛擬主播、游戲 NPC、數(shù)字人網(wǎng)頁(yè)應(yīng)用。6.2 Live2D 形象驅(qū)動(dòng)的基本流程一個(gè)可交互的 Live2D NPC 需要三樣?xùn)|西模型文件.model3.jsonCubism 3 及以上或.model.jsonCubism 2。背景可以是一張游戲場(chǎng)景截圖、一張純色背景圖或者一個(gè)透明 Canvas。語(yǔ)音驅(qū)動(dòng)播放音頻時(shí)根據(jù)音頻音量控制嘴巴開合根據(jù)語(yǔ)義控制表情切換。// 文件路徑web/index.html 核心片段示意 Live2D 初始化 const live2d new Live2DModel(); await live2d.loadModel(models/npc_driver.model3.json); // 添加到 Canvas const app new PIXI.Application(); app.stage.addChild(live2d); // 根據(jù)語(yǔ)音音量驅(qū)動(dòng)嘴型 const analyser audioContext.createAnalyser(); analyser.fftSize 256; const dataArray new Uint8Array(analyser.frequencyBinCount); function updateMouth() { analyser.getByteFrequencyData(dataArray); let volume 0; for (let i 0; i dataArray.length; i) { volume dataArray[i]; } volume volume / dataArray.length / 255; // 設(shè)置 Live2D 參數(shù)嘴部開合 live2d.internalModel.coreModel.setParameterValueById(ParamMouthOpenY, volume); requestAnimationFrame(updateMouth); }這里的核心是把音頻音量映射到 Live2D 的ParamMouthOpenY參數(shù)。聲音越大嘴巴張得越大玩家看起來(lái)就像 NPC 在說(shuō)話。6.3 設(shè)置 NPC 背景背景有兩種常見做法靜態(tài)背景在 HTML 里把canvas放在一張背景圖上方或者直接用 CSS 設(shè)置background-image。動(dòng)態(tài)背景如果是游戲場(chǎng)景可以直接把 Live2D 渲染到游戲引擎的 UI 層。比如 Unity 里用 RenderTexture 渲染 Live2D再疊加到游戲主場(chǎng)景上。在 Web 頁(yè)面里最簡(jiǎn)單的靜態(tài)背景寫法div styleposition: relative; width: 800px; height: 600px; background-image: url(bg_gta_street.jpg); background-size: cover; canvas idlive2d-canvas styleposition: absolute; bottom: 0; left: 50%; transform: translateX(-50%);/canvas /divNPC 形象放在底部居中背景用街道圖片視覺上就像 NPC 站在游戲街角和你對(duì)話。6.4 配置 NPC 的語(yǔ)音特征同一個(gè) Live2D 形象可以搭配不同音色的 TTS。比如男聲 NPC用低音色 TTS。女聲 NPC用明亮音色 TTS。不同語(yǔ)氣TTS 的rate、pitch參數(shù)可以控制語(yǔ)速和音調(diào)。在服務(wù)端把 NPC 的語(yǔ)音配置和形象配置綁定到一起{ npcId: taxi_driver_001, name: 老馬, model: models/taxi_driver.model3.json, background: bg_gta_street_night.jpg, voice: { engine: edge-tts, voiceName: zh-CN-YunxiNeural, rate: 10%, pitch: -2% }, persona: 你是一個(gè)出租車司機(jī)熱情健談偶爾吐槽路況 }前端加載這個(gè)配置后就能把 Live2D 形象、背景、語(yǔ)音、Prompt 全部綁定到一個(gè) NPC 上。7. 把 AI 語(yǔ)音融入游戲玩法的接入思路7.1 在游戲客戶端接入以“類 GTA”開放世界游戲?yàn)槔绻谟螒騼?nèi)部接入這套系統(tǒng)有三種接入程度程度一系統(tǒng)級(jí)懸浮窗不改游戲本體做一個(gè)外部語(yǔ)音助手懸浮窗。玩家按快捷鍵說(shuō)話懸浮窗里的 Live2D 角色回應(yīng)玩家。適合快速驗(yàn)證玩法。程度二游戲內(nèi) UI 插件在游戲內(nèi)渲染 Live2D 角色把音頻播放到游戲主輸出設(shè)備。這種方案需要游戲支持 UI 擴(kuò)展或 Mod SDK。程度三原生引擎集成在開發(fā)階段直接把 AI 語(yǔ)音模塊集成進(jìn)游戲引擎。Unity 可以使用WebSocket客戶端庫(kù)連接你的 Netty 服務(wù)端把微麥克風(fēng)音頻編碼后實(shí)時(shí)上傳再接收 TTS 音頻播放。無(wú)論是哪種接入程度Netty 服務(wù)端的消息協(xié)議都是一樣的。游戲端只需要實(shí)現(xiàn)采集音頻 → 二進(jìn)制幀上傳 → 接收文本/音頻幀 → 播放音頻并驅(qū)動(dòng) Live2D。7.2 AI 語(yǔ)音能改變哪些玩法這套系統(tǒng)接入后能帶來(lái)幾個(gè)具體玩法變化自由對(duì)話任務(wù)不再提供“選項(xiàng)A、選項(xiàng)B”玩家直接說(shuō)出選擇NPC 根據(jù)語(yǔ)義理解回應(yīng)任務(wù)分支從固定幾條變成無(wú)限可能。NPC 身份感增強(qiáng)每個(gè) NPC 有獨(dú)立的 Prompt、音色、Live2D 形象玩家可以記住“這個(gè)出租車司機(jī)說(shuō)話很幽默”。語(yǔ)音交互與潛行玩法結(jié)合玩家說(shuō)話的聲音大小可以被系統(tǒng)識(shí)別大聲說(shuō)話會(huì)引來(lái)附近敵人小聲說(shuō)話則安全。這就把“語(yǔ)音”本身變成了游戲機(jī)制。需要說(shuō)明的是開發(fā)此類功能時(shí)必須注意游戲廠商的用戶協(xié)議和版權(quán)要求不要通過(guò)非法修改或外掛方式繞過(guò)游戲保護(hù)機(jī)制。建議在自研項(xiàng)目、開源游戲或已授權(quán)的 Mod 環(huán)境中實(shí)現(xiàn)。7.3 性能與延遲控制實(shí)時(shí) AI 語(yǔ)音最影響體驗(yàn)的是延遲。整個(gè)鏈路的延遲分布大概是音頻采集與上傳20ms100msASR 識(shí)別200ms800msLLM 生成500ms3000msTTS 合成200ms1000ms音頻下發(fā)與播放20ms100ms總延遲通常在 1 秒到 5 秒之間。想要降低延遲常用手段ASR 使用流式識(shí)別玩家還沒說(shuō)完就能看到前半句文字。LLM 使用流式輸出生成第一個(gè) token 后就返回不要等整段生成完。TTS 也支持流式合成LLM 每生成一句TTS 立刻合成這一句。網(wǎng)絡(luò)傳輸使用 WebSocket 長(zhǎng)連接避免每次請(qǐng)求重建連接。Netty 在這種場(chǎng)景下的優(yōu)勢(shì)正好體現(xiàn)在高并發(fā)連接和低延遲傳輸上一個(gè)服務(wù)端實(shí)例可以撐起大量游戲客戶端的實(shí)時(shí)語(yǔ)音連接且每個(gè)連接都有獨(dú)立的狀態(tài)管理。8. 常見問(wèn)題與排查思路8.1 Netty 服務(wù)端收不到客戶端音頻問(wèn)題現(xiàn)象常見原因解決思路客戶端已連接但服務(wù)端沒有日志W(wǎng)ebSocket 握手失敗檢查連接的路徑是否和WebSocketServerProtocolHandler中配置的路徑一致二進(jìn)制幀接收到了但數(shù)據(jù)為空音頻編碼未按幀發(fā)送在客戶端打印發(fā)送的字節(jié)長(zhǎng)度確認(rèn)readableBytes()是否 0連接建立后被很快關(guān)閉心跳檢測(cè)超時(shí)檢查IdleStateHandler的參數(shù)客戶端應(yīng)定期發(fā)送心跳幀8.2 ASR 識(shí)別結(jié)果為空如果服務(wù)端收到了音頻但 ASR 一直返回空文本優(yōu)先排查音頻采樣率是否為 ASR 服務(wù)支持的格式常見 16kHz 或 8kHz。音頻格式是否為 PCM/WAV而不是 MP3。是否使用了流式識(shí)別但未正確發(fā)送“結(jié)束”標(biāo)志。音頻是否存在大量靜音ASR 沒有捕獲到有效語(yǔ)音。建議在服務(wù)端把收到的音頻原始字節(jié)保存成.pcm文件用 Audacity 打開檢查能快速定位問(wèn)題。8.3 Live2D 嘴巴不動(dòng)或表情不自然問(wèn)題現(xiàn)象常見原因解決思路嘴巴一直不張開音量分析值太小檢查音頻分析器是否連接到正確的音頻源將音量映射放大嘴巴張合和語(yǔ)音不同步嘴型更新未和音頻播放綁定使用同一requestAnimationFrame循環(huán)更新嘴型參數(shù)表情不切換沒有發(fā)送表情控制消息在服務(wù)端回復(fù)里增加emotion字段前端根據(jù)該字段調(diào)用 Live2D 動(dòng)作Live2D 模型里可控制的參數(shù)通常是ParamMouthOpenY、ParamEyeLOpen、ParamEyeROpen、ParamBrowLY等。你可以先通過(guò) Live2D 官方編輯器確認(rèn)模型包含哪些參數(shù)再寫驅(qū)動(dòng)代碼。9. 最佳實(shí)踐與工程建議9.1 Netty 工程化實(shí)踐連接狀態(tài)管理在ChannelHandlerContext的channel屬性中保存用戶會(huì)話狀態(tài)例如AttributeKeyString保存當(dāng)前連接綁定的 NPC ID。心跳與斷線重連客戶端和服務(wù)端都要實(shí)現(xiàn)心跳??蛻舳硕ㄆ诎l(fā)送 Ping 幀服務(wù)端一段時(shí)間沒收到消息就關(guān)閉連接。音頻幀有序性音頻幀對(duì)順序敏感確保 Netty 的EventLoop處理同一個(gè)連接的音頻幀時(shí)不被多線程并發(fā)處理。默認(rèn) Netty 會(huì)保證同一個(gè) Channel 的操作是串行的不需要額外加鎖。背壓處理如果 ASR 或 TTS 響應(yīng)慢服務(wù)端寫入數(shù)據(jù)時(shí)要注意Channel.isWritable()避免把內(nèi)存寫爆。if (ctx.channel().isWritable()) { ctx.channel().writeAndFlush(new BinaryWebSocketFrame(data)); } else { // 客戶端消費(fèi)不過(guò)來(lái)丟棄或緩存并記錄日志 System.out.println(Channel 不可寫丟棄音頻幀或加入緩存隊(duì)列); }9.2 AI 服務(wù)對(duì)接實(shí)踐抽象接口把 ASR、LLM、TTS 都定義成接口具體實(shí)現(xiàn)使用策略模式。這樣換供應(yīng)商不影響主流程。超時(shí)與重試調(diào)用大模型接口時(shí)要設(shè)置合理的超時(shí)時(shí)間通常 510 秒失敗后重試最多 2 次避免雪崩。敏感內(nèi)容過(guò)濾玩家語(yǔ)音識(shí)別成文本后服務(wù)端需要做內(nèi)容安全校驗(yàn)防止不適宜內(nèi)容被輸入到 LLM 或輸出給玩家。Prompt 注入防護(hù)玩家可能在語(yǔ)音里輸入“忽略之前的指令”之類的話需要把用戶輸入嚴(yán)格限制在“NPC 對(duì)話”范圍內(nèi)在 Prompt 中明確提示模型要堅(jiān)守角色設(shè)定。9.3 Live2D 形象與游戲玩法結(jié)合建議形象設(shè)計(jì)和 NPC 語(yǔ)音要統(tǒng)一一個(gè)活潑的 NPC 不能配一個(gè)低沉的老年音色否則玩家會(huì)很出戲。表情狀態(tài)機(jī)不要只控制嘴巴可以根據(jù) LLM 返回的情感傾向高興、生氣、疑惑切換 Live2D 的表情。降低模型資源大小Live2D 模型紋理盡量使用壓縮格式加載時(shí)做懶加載避免游戲啟動(dòng)時(shí)卡頓。9.4 數(shù)據(jù)隱私與合規(guī)在真實(shí)項(xiàng)目中玩家語(yǔ)音會(huì)包含個(gè)人信息需要注意語(yǔ)音數(shù)據(jù)盡量實(shí)時(shí)處理不落盤或處理完立即刪除。使用 HTTPS/WSS 協(xié)議傳輸避免音頻流被竊聽。在隱私政策中明確說(shuō)明語(yǔ)音數(shù)據(jù)的使用目的。對(duì)接云服務(wù)時(shí)選擇有數(shù)據(jù)合規(guī)認(rèn)證的廠商。10. 更多擴(kuò)展方向如果你已經(jīng)完成了上面這套系統(tǒng)可以繼續(xù)擴(kuò)展以下能力讓 AI 語(yǔ)音真正“接管”更多游戲玩法多語(yǔ)言 NPC 對(duì)話接入多語(yǔ)言 ASR 和 TTS讓 NPC 自動(dòng)使用玩家語(yǔ)言回復(fù)。玩家說(shuō)中文NPC 回中文玩家切英文NPC 也切英文。NPC 記憶系統(tǒng)用 Redis 或向量數(shù)據(jù)庫(kù)保存 NPC 對(duì)每個(gè)玩家的“印象”。玩家經(jīng)常給 NPC 幫忙NPC 的語(yǔ)氣會(huì)變得更友好玩家總搗亂NPC 會(huì)不耐煩。多人語(yǔ)音場(chǎng)景多個(gè)玩家在同一場(chǎng)景里同時(shí)和不同 NPC 對(duì)話Netty 的高并發(fā)長(zhǎng)連接能力正好派上用場(chǎng)。你可以按場(chǎng)景劃分 ChannelGroup實(shí)現(xiàn)“誰(shuí)在附近NPC 優(yōu)先回應(yīng)誰(shuí)”。語(yǔ)音驅(qū)動(dòng)游戲行為不只是對(duì)話玩家的語(yǔ)音還可以觸發(fā)游戲動(dòng)作。比如玩家喊“停車”載具真的停下來(lái)喊“開槍”角色執(zhí)行攻擊動(dòng)作。把語(yǔ)音識(shí)別結(jié)果映射到游戲輸入層玩法自由度會(huì)大大提升。回到最初的問(wèn)題AI 語(yǔ)音全面接管 GTA 到底怎么實(shí)現(xiàn)核心并不是 GTA 本身而是一整套實(shí)時(shí)語(yǔ)音交互鏈路。Netty 解決了實(shí)時(shí)音頻傳輸?shù)姆€(wěn)定性問(wèn)題ASR/LLM/TTS 解決了語(yǔ)義理解和語(yǔ)音生成問(wèn)題Live2D 解決了形象表現(xiàn)問(wèn)題。三者串聯(lián)起來(lái)玩家面對(duì)的不再是一個(gè)“播放預(yù)錄音頻的木頭人”而是一個(gè)能聽、能說(shuō)、有表情、有性格的虛擬角色。這套架構(gòu)不止用于游戲虛擬主播、在線教育、智能客服、數(shù)字人導(dǎo)覽底層邏輯完全一致。你可以先跑通 Netty 長(zhǎng)連接和音頻幀傳輸再逐步接入 ASR、LLM、TTS最后用 Live2D 讓角色“活”起來(lái)。建議動(dòng)手實(shí)現(xiàn)時(shí)先忽略游戲客戶端把服務(wù)端鏈路和 Web 端 Live2D 頁(yè)面調(diào)通再考慮接入 Unity 或真實(shí)游戲環(huán)境。這個(gè)順序能把復(fù)雜問(wèn)題拆小每一步都能看到成果排錯(cuò)也會(huì)容易得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲欧美大| 久久性视频| 欧美少妇大量自拍视频在线观看| 在线日韩精品一区二区三区| 亚洲色悠悠久久88| 东京热精品97综合网| 永久免费av无码网站国产app| 色嘟嘟人妻天堂网| 欧美性巨大╳╳╳╳╳高跟鞋| 国产精品午夜福利| 色婷婷在线视频精品导航| 日韩精品亚洲专区在线影视| 成人无码在线超碰网| 夜夜操夜夜高潮夜夜爽国产精品区| 九九综合久久| 都市久久精品激情亚洲| 神马午夜久久| 国产成人五月天丁香花| 久久久91福利姬| 一区,二区,三区网站| 热无码中文亚洲H一道本一区二区| 熟女露脸激情自拍视频| 色九九综合AV| 亚洲同性aV综合| 91丝袜美女| 91暧暧| 久久免费99精品久久久久久| 精品黄色电影| 亚洲国产一区二区入口| 亚洲中文国际强奸字幕 | 色偷偷超碰亚洲| 91艹逼精品| 日本午夜福利视频| 日韩欧美偷拍美女视频| 青青草乱入乱欲视频在线观看| 熟妇熟女一区二三区| 色婷婷成人综合| 韩国手机不卡无码三级视频| 97色爱| 精品二区久久| 黄色AAAAAAAAAAA大片| 欧美性爱无码一区二区三区| 99热这里都是精品| 久久久久久中文| 精品亚洲成人免费在线| 97综合在线| 久湿久久| 特级毛片特黄久久免费看| 免費人妻夜夜爽天天爽爽一区| 成人九九| 91oumei| 毛片一区二区| 超碰久久精品| 99天堂网| 大肥女高潮bbwbbwhd视频| 亚洲加勒比色图| a片偷拍视频| 一本精品日本在线视频精品| 亚洲男人的天堂亚洲| 不卡视频一区蜜桃视频 | 农村妇女精品一二区| 亚洲蜜乳av| 欧美色图91p| 国产九九九九九九九九| 久9爱精品| 啊啊啊啊视频免费| 欧美另类综合久久| 91人妻人人澡人人爽人人精品| 国内毛片免费h片在线| 97欧美精品| 亚州色图片在线色| 五月天激情综合网| 午夜爽爽爽在线观看永久入口姬片| 大香蕉伊然在亚洲91| 色综合98| 亚洲码专区| 中文?日韩?免费?精品| 人妻81p| .精品人妻一区二区三| 中文字幕 国产 精品| 天天色综合图片| 黄日韩| 日本天堂网| 九九干| 又大又大又大又粗爽高潮观看| 劲爆欧美人妖三区91| 日日夜夜模| 久久日本熟女精品一区| 青青草天天亲夜夜操网| 91校园春色长篇| 91精品久久久久久77777| 色综合久久夜色精品国产天堂| 强奸熟女一区二区三区| 日韩免费在线观看不卡| 日韩精品第3页| 青青草久久在线| 亚洲 欧美 小说| 天操天操夜操夜月操月年年操| 久草精品一区| 9Ⅰ超碰| 国产精品国产亚洲区艳妇糸列| 亚洲欧洲精品视频发布| 330Dv国产女人终合视频极品人与兽 | 亚洲欧美精品国产一区二区| 欧苏综合色综合| 青青草综合在线| 在线播放免费av福利片| 日韩影片中文字幕一区二区三区| 男女啊啊啊| h无码动漫在线观看| 91扒丝袜综合在线| 97免费在线观看| 日本123区操B视频| 国产精品第一页国产大屁股视频免费区i| 91中文字幕| 在线看免费无码AV天堂的| 精品一区二区麻豆| 久久久久久国产精品免费网站| 精品久久久久9999| 一级乱伦网站| 精品夜夜澡人妻无码| 欧美一区二区| 亚洲国产精品久久久久久久久久| 久久精品黄色| 校园春色制服丝袜中文字亚洲| 超碰4A| 99视频内射三四| 亚洲精品99999| 婷婷色影院| 成人小电影网站tex| 国内精品伊人久久久久影院会| 强歼乱伦资源网| 蜜臀精品1区2区| 久9无限国产| 国产精品高潮久久久无码| 五月天久久婷婷亚洲| 午夜国产综合视频在线观看| 岛国免费视频在线| 白丝AV网站| 另类小说综合网| 美女91网址| 涩综合导航| 亚洲色综网| 亚洲一欧洲中文字幕在线 | 精品久久久av| 中文字幕制服诱惑| 99超碰色| 超碰在线香蕉| 欧美不卡在线一区二区| 91日日夜夜| 人妻精品一区二区在线| 天啪| 亚洲中文字幕乱码无码一区二区 | av无码精品久久久久| 国产中文字幕在线| 五月天综合网| 日本三级韩国三级99| 亚洲麻豆av一区二区| 在线观看视频91| 久久一区二区三区入口| 清纯唯美亚洲另类| 人妻在线臀日韩| 97视频在线看| 一区二区视频你懂的| 福利伊人玖玖国产| 久久久人妻| 久久国语| 啊啊啊用力在线观看| 日韩精品国产一区二区| 国产高清自拍视频| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | A 天堂| 日韩无码视频黄色| 超碰97 线线 在现| 天堂网 主播 亚洲| 亚洲AV乱码专区国产噜噜亚洲 | 欧美日韩免费专区在线| 狠狠操天天干| 强奸乱伦Av网| 免费97视频| 日韩免费看黄片| 久草尤物| 91性网| 久久嫩草国产成人一区| 六月丁香久久| 99热色这里只有精品| 顶级丝袜熟女一区二区三区| 国产精品一区二区亚洲人成毛片| 欧美亚洲| 亚洲av青草久久一区二区| 射丝袜大香蕉| 97网址97| 制服诱惑亚洲一区二区三区在线观看| 熟女欧美日韩综合婷婷| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 亚洲精品国产精品成人| 欧美中日韩XXXX| 91久久国外网| 亚洲天堂日本| 亚洲999综合| 好屌色综合| 中文久久一区| 色噜噜人妻丝袜AV资源| 97这里只精品| 九九九精品色乱九九九| 啊啊啊啊啊啊啊网址在线观看| 91新在线欧美| 大香网伊人久久综合网eew| 日韩中文字幕熟妇人妻 | 99久久精品欧美国产| 大象AV在线| 熟女人妻精品一区二区视频| 中文字幕制服诱惑| 国产无码三级视频在线观看| a一区二区三区乱码在线| 女人与公拘交酡2020视频| 999久久久| 综合激情二| 四虎午夜影院| 国产 无码 一区二区| 91快色色色色色| 日本三级网页| 久久XX| 久久久九97| 国产性感骚丝袜在线| 综合亚洲情色| 免费精品AB| 日韩在线电影| 自拍偷拍草一草| 乱伦图av| 中文字幕在线观看丝袜| 欧美性区| 欧美色图自拍| 91夜色| 欧美性爱免费短视频| 日韩性爱1级片视频| 性开放中文AV高清无码免费看| 国人欧美精品一区二区| 99.色网| 人人搡人人肉久久精品| av2014 日韩在线中文字幕| 久久婷婷成人综合色怡春院| 久久性爱精品一区| 日日操天天操| 劲爆欧美人妖三区91| 九七超碰人人乐| 亚洲男人久久综合天堂| 曰韩av中文字幕专区| 操九九九九九九| 热的中文 热的有码 热的国产| 欧美综合综合| 性爱乱伦一区| 加勒比综合九九99视频在线播放| 国产午夜视频| 亚洲欧美另类图片| 国产精品婬乱一级毛片彝族| 久久熟女人| 中文字幕诱惑制服人妻丝袜美丝袜美 | 一卡二卡三卡| 亚洲三区视频| AV天堂丝袜| 99久久久久久亚洲精品不卡| 欧美黄片视频在线观看免费| 韩日巨乳美女免费视频在线观看| 91一区二匹| 思思热久久成人| 920日本午夜免费| 熟妇高潮精品一区二区三区下载| 91老熟女视频| 91久久久久免| 999精品久久久久久久| 国产人伦a片信息免费片| 久久久久骚| 久久人妻一区二区三区高清| 欧美性爱无码一区二区三区| 嗯嗯嗯不要不要免费视频| 欧美 亚洲精品首页| av在线免费一区二区| 亚洲射综合网| 色牛aV| 嗯嗯啊操我| 亚洲天天自拍| 99这里只有精品| 色亚州人久干视频在线观看免费版| 日韩欧美性爱电影在线观看| 天天综合网一91网| 国产高清自拍视频| 婷婷三区| 999久久久免费精品国产牛牛| 亚洲AV永久无码一区仙野| 97丝袜亚洲在线播放| 亚洲AV成人精品网站在AV| 久久久爆乳翘臀一线天伦理视频| 欧洲精品二区| 大奶啊啊好爽| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 亚洲色图第一页| 在线看片国产精品每日更新| 超碰在线在公开超碰在线在公开| 精品一区二区成人| 熟女熟妇一区二区三区视频| 国产AV久久久蜜爱影集| 日亚韩精品视频二区三| 国产激情在线| 国产毛片久久久久久久| 麻豆国产视频精品观看| 黄片视频观看| 亚欧操逼片在线观看| 国产精品一区二区手机看片| 最新av在线| 国产精品久久久 | 亚洲男人电影天堂| 丰满岳乱妇一区二区三区| 国内91熟女人妻丝袜天天精品视频在线| 人妻熟女一区在| 丁香五月成人| 国内毛片无码一级毛片| 操屄日韩| 人妻社区男人天堂| 啪啪啪精品视频| 天堂精品一区| 天天天天操| 久久大黄片| 欧洲中文字幕| 久久男女激情视频网站| 欧美裸体美女日麻屄| 国产超碰在线一区| 日本高清一区二区在线| 国产欧美在线观看免费观看| 美国三级日本三级久久99| 欧亚免费视频| 啪啪啪精品| 青青草日韩免费观看高清在线| 日本女人操逼| 九九碰九九爱97超碰| 天天92av| 久久99精品国产| 国产成人精品日本视频| 2017av无码免费无线播| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 中文字幕在线观看丝袜| 亚洲 自拍偷拍 欧美| 亚洲天堂一二| 麻豆一区在线| 亚洲午夜免费狠狠干| 久久久久久久伊人精品| 天天综合中文字幕 91| 欧美激情超碰777| 97香蕉碰碰人妻国产欧美| 97在线资源| 国内精品a| 日本精品加勒比海一区| 欧美国产有色电影| 五月天激情四射| 男女一进一出视频久久| rivers-china.com| 91麻豆天美国产欧美高潮| 色婷婷丁香五月| 超碰人妻久久| 亚洲天堂情色| 国产中出内射一区二区| 97久久超碰亚洲| 国产青视频| 1024人妻| 免费看日本操逼视频| 欧美1区二区三区公司| 亚洲黄色AV电影| 国模91| 很黄很污的免费网站| 91久久久久久| 婷婷大香蕉| 一级啊性爱在线视频| 亚洲阿v天堂无码z2018| 欧美性爱综合,免费| 3P丝袜熟女 色综合| 国产AV线| 97精品网| 国产久久久久久| 中日韩久久久免费看| 久久、1234| 嗯嗯嗯啊啊啊操的我好爽| 亚洲综合五月天| 91|九色|国产熟女| 青青青草伊人精品| 日本欧美韩国国产在线| 亚州五月| 大干人妻| 97自拍一区| 骚货操死你| AAAA欧美日韩| 91视频精品| 国产毛片片精品天天看视频| 92一区二区| 大茄子熟女AV导航| 97超碰9| 天天综合网合集91| 四虎884| 色97欧美| 日本中文熟女视频| 久久受www免费人成| 午夜福利1区2区3区| 97色伦97色伦国产欧美| 成人三一级一片aaa| 日本操嫩b网| 久久精视频美日韩在线视频| 五月婷婷激情网| 91超碰人人操| 91精品成人| 极品色社| 97碰碰日本乱偷人妻中文的| 亚洲熟妇综合久久久久久| 少好三P| 这里都是精品| 亚洲另类春色| 2019久久久久久久久福利| 亚洲无码免费看| 五月丁香社区婷婷日韩欧美精品影院| www.夜夜操| 啊啊啊轻点在线观看| 91模特在线观看| 日韩精品-原创伙伴| 91丨国产丨白浆秘 洗澡动漫| 以及麻豆国产入口在线观看免费| 91丨熟女丨丰满熟女| 尹人大香蕉视频在线| 和协无码影院| 国产精品一区二区麻豆| 超碰午夜| 在线观看综合精品亚洲| 91 国产丝袜在线放观看| 国产熟女精品区| 成人AV在线网站| 日韩免费中文字幕视频| 国产亚洲在线| 黄页视频网站野外| 日韩久久.一级黄色片| www.夜夜| 加勒比性爱成人在线| 精品国产乱码久久久久久网站入口| 五码视频在线观看| 久久久久久国产精品| 欧美天堂超碰97| 91国模| 中文字幕aⅴ在线视频| 久久久艹艹艹| 在线二区不卡| 国产第25页在线观看| 97爱欧美| 欧美激情久操网| 欧美黄色片AAAAA| 97国产色图| 超碰78| 95人妻爽爽人人做人人澡| 人人操人人射人人干| 亚洲天天综合| 亚洲无套久久嗯嗯| 日韩97P| 九九碰九九爱97| 91丝袜美腿片| 亚州免费啪啪视频| 欧美色日本| 精品日韩人妻视频| 国内精品不卡无毒99999| 风流老熟女一区二区三区l| 91丝袜美女| 香蕉视频欧美一卡二卡| 熟女精品一区二区三区| 操久久久久| 精品一区二区成人动漫| 国产风韵犹存熟妇三区| 成人黑料社久久| 久久99久久99精品天美传媒棢·纸:. | 强上我不卡卡| 日韩欧美福利视频看看| 欧美色图亚洲特色| 精品人妻1区| 日韩紧密久久| 人人操人人搞人人草| 91久久国产综合精品| 免费?级毛片无码?∨蜜芽试看| 色综合潮| 欧美精品成人在线播放| 成人久久久精品| 精品亚洲黄色片 国产精品导航一区二区 | 天堂麻豆天美| 操高情无码| 风骚少妇视频中文字幕| 乱伦熟女区| 色原狠狠天天天| 一中国女人毛片水真多| 九九综合| 午夜男女爽爽爽影院视频| 97 超碰 人人做 人人爱| ji熟女.com| 麻豆a'v电影| 99无码视频| 亚州欧美色图| 丝袜美腿校园春色| 九九Av| 2024年最新色情网站在线观看| 无码99| 精品人妻中文字幕高清| 四虎永久在线精品免费网址| 情趣丝袜无码操逼视频| 亚洲国产亚洲天堂| 人妻天堂综合网| 91视频伊人| 职场同事知名国产国产精品久久欧美日韩 | 日韩乱伦影音先锋| 色综91| 伊人精品视频| 伊人久久艹| 日韩免费在线观看不卡| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 伊人影院综合是一个与深夜成人在线| 亚洲丝袜二区在线| 校园春色亚洲欧洲| 99热9| 一起草欧美| 极品少妇久久久| 久久久久久久久久久久黄色 | 黄色一区二区秘书性感| 亚洲欧美天堂| 丝袜视频网国产90| www.99热在线只有精品| 婷婷在线播放| 婷婷中文网| 亚洲伊人久久综合97| 精品久久久一本一道| 欧美丝袜激情| 99国内精品| 亚洲熟女中文字幕在线| 日本成人A片网站| 天天干18禁| 久久视频,这里只有精品| 色呦呦、国产精品| 五月丁香综合网| caoni国产亚洲av| 国产强奸AV在线| 96麻豆精品一区二区三区| 青青草无码视频| 国产精品欧美激在线| 亚洲国产第一页综合视频| 亚洲一区二区三区AV无码| jizz啪啪| 一区二区三区蜜桃成人撸久久东京热| 丁香五月综合| 久久亚州精品成人Av无| 国产免费内射视频| 日本不卡免费二区| 九九综合网| 欧美性生活内射| 青苹果影院男人的天堂| 青青青国产| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 超碰久久网| 久草综合视频| 中文字幕AV片| 强奸熟女一区二区三区 | 草草电影院| 国内外内射高清视频| 欧美综合1性辶| 骚货操死你| 国产日韩怡红院| 人妻精品一区二区三区| 天天综合网在线91| 国产三级片在线观看| 亚洲开心网| 欧美97| 人人操人人干xxx| 2020视频1区2区3区| 精品人妻伦一二三区久久| 国产一级片| 最新欧洲欧美日本激情网站| 25国产精品免费观看| 欧美 亚洲 制服 精品| 国产精品国产自产拍高清AV| 亚洲AO在线| 日韩精品人妻中文字幕久久久| 神马午夜久久久| 久久精品国产久精国产| 亚洲天堂一二| 可免费观看的av毛片中日美韩| 欧美性爱精品七区| 亚洲国产ⅴ高清在线观看| 青娱乐久久艹| 蜜臀久久99精品久久久老,,| 午夜成人福利影视| 日日骚精品视频| 欧美日韩亚洲少妇寂寞影院正在播放| 日日骚中文字幕| 欧美亚洲国产91在线| 人人摸人人添人人操| 极品尤物在线观看| 欧美精品丝袜久久久中文字幕| 欧美91精彩| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 97视频在线视频| 亚洲激情在线| 日本1区2区不卡视频| 丰满少妇乱子伦精品无| 日韩亚洲美州欧洲综三区一品在线| 色天使大香蕉| 亚洲少妇视频| 国产精品毛片?v一区二区三区| 三级片网站在线播放| 99热亚洲天堂| 婷婷探花久久精品一区| 国产家庭乱伦表演| 丁香婷婷久久| 午夜福利在线合集| 91免费看一区二区三区| 激情五月天色色网| 国产午夜视频| 国产精品午夜AV完会免费| 日韩 欧美 另类 人妻| 夜夜爽77777| 亚洲天天精品| 岛国激情视频在线观看| 欧洲无码一区二区| 四虎影视国产精品| 伊人网在线观看| 国产农村妇女毛片精品久久| 色黄色美女大长腿午夜视频| 91色碰| 美女好片色日本| 无码av永久免费专区网站| 亚洲一二三四区机械| 麻豆熟妇乱妇熟色A片在线看| 26uuu性物| 91在线免费观看处女| 国产精品伦理| 日本亚洲熟女视频| 任你干在线视频| 国产精品人人爽人人做可爱福利| 日韩pv中文| 国内外激情在线| 久久国内| 精品乱码在线观看| 你想操日本小逼吗| 超碰98综合网| 国产亚洲欧美每日在线| 你草精品在线视频| 欧美18 在线观看| 欧美v日韩欧亚洲电影天堂色诱,国产传媒 | a片在线播放| 日本人体九九九九九九| 国产馆| 91一区二区| 老鸭窝成人免费毛片视频| 91啪啪视频| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 麻豆人妻精品一区二区| 欧美性色欧美| 99热在线观看| 96久久久| 伊人操| 老女人综合网| 97精品国产97久久久久久免费| 精品天堂| 99999久久久久9国产精品| 国产精品久久久久9999小说| 色偷综合| 亚洲少妇综合在线播放| 91青青在线视频| 91精品国产高清久久久久久,亚洲成人| 91路www| 91成人久久| 青青草在线视频美女| 五月丁香啪啪网| 中文字幕在线免费观看 | 久久久久亚洲Av无码专区老牛影视| 欧美熟爽综合| 国产乱伦亚洲| 精品二区三四区五电影 | 桑老女人九区| 99超碰色| 亚洲精品人妻在线| 国产精品伦理| 欧美性爱一内片一区二区三区| 国产亚洲精品A在线观看下载| 色欲色香天天天综合网www-亚洲综合国| 久久免费99精品久久久久久| 91欧美丝袜| 天天干天天干天天干| 亚洲乱码精品一区二区| a人片中文字幕一区二区| 人人透人人操| 中文字幕天堂在线| 后入式五六区| 97午夜剧场日韩| 国产av又色又爽又黄| 日日躁天天躁狠狠躁| 欧美激情视频一区二区三区不卡| 无色无码| 国产精品久久久啊| 日韩人妻精品| 日本天堂网| 亚洲Av无码成人精品国产| 色姑娘综合网| 国产AB视频| 天天摸夜夜摸| 婷婷99狠狠| 日韩亚洲精品一区二区| 91综合网站| 99后入| 久久综合久久综合人久久夜精品| 亚洲欧美日韩精品久| 亚洲春色一区二区三区| 一本大道久| 97超级欧美| 尻女朋友一夜| 久9视频| 91人妻中文| 青娱乐老司机视频| 麻豆精品.欧美精品.日韩精品.| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 亚洲成人贴图| 中文字幕欧洲有码| 神马影院午夜福利久久久| 96AV精品| 亚洲综合五月天| 国产 亚洲 丝袜 制服| 白丝被操91| 亚洲九九九| 91久久国产精品| 欧美丝袜美女电影一二三四区| 欧亚不卡| 久久的网站啊啊啊啊啊| 蜜臀av在线播放一区二区三区| 无码 有码 国产18p| 午夜福利无毒不卡| 翔田千里爆乳巨臀无码| 午夜操一操| 91久久久久久久久18| 亚洲国产日韩精品久久久| 国产97综合| 中文字幕午夜精品久久久| 色妇91| 少妇丝袜在线观看AV| 东京热av男人的天堂| 中文久久一区| 亚州综合电影| 91麻豆天美国产| 欧美亚洲丝袜美女电影| 91亚洲影院综合| 亚洲A色| 亚洲综合99999| 久久老熟女| 十八禁黄色成人网站观看| 岛国色情视频在线观看| 岛国在线国产| 一区二区精品日韩欧美在线观看| 亚洲 暴爽 AV人人爽日日碰| 加勒比综合88| 99re在线| 欧美欧美啪啪视频| 亚洲一卡二卡在线免费| 精品毛片av一区二区| 亚洲最新中文字幕免费| 天天做日日爱夜夜爽| 欧亚在线视频| 粉嫩国产精品久久粉嫩| 久久久久久夜夜夜夜夜| 丁香六月激情综合| 97人妻色| 天美一二三在线观看Av| 午夜后入| 国产999精品久久久| 免费国产视频| 日韩国产不卡在线视频| 无码高清专| 98色网| 亚洲综合影视| 东京热大香焦| 国产深喉视频一区二区| 午夜无遮挡男女啪啪视频| 国产一级作爱毛片| 色欧美天天| 99蜜桃臀亚洲成人在线观看| 91在线国产后入风骚翘臀美女素人| 98久久超碰| www.99色| 久久ww| 91亚州欧美| 国产精品一区二区麻豆| 欧美性xxxxx狂欢| 国产乱码精品一区二区三区四川| 亚洲丝袜二区| 久久久久久久六六| 97精| 黑人精品成人一区二区三区| 欧美少妇大量自拍视频在线观看| 精品无码久久久久| 天堂综合网| 自拍偷拍 高清无码| 夜夜嗨一区二区| 新精精品久久精品| 无码人妻精品酒店| 日韩精品永久在线观看| 在线天堂999| 一卡二卡在线播放| 国产强奸乱伦xd| 国产又粗又又黄又猛| 日本不卡一区二区三区| av网站国产主播在线| 极品极品色影院| 狠狠夜色午夜久久综合在线| 久草新在线| 操逼视频免费日韩无码| 1二区9| 国产真实子伦对白| 99热伊人| 青久久| 国产精品久久久久久久AV大片 | 金典av| 97爱爱| 性爱久久| 亚洲国产97在线精品一区| 亚洲国产成人福利在线观看| 四虎影视在线| 亚洲高清91| 免费A V在线| 欧美综合777| 巨爆乳一区二区爆乳区| 久草视频制服诱惑| 日本不卡二区| 亚洲日韩一区电影| 亚洲美女精品九九视频| av国产无码| 91精品久久久久久综合五月天| 国产农村妇女精品一| 色悠久| 日本欧美韩国日产片片在线看免| 国产自偷| 免费精品福利在线观看| 蜜臀一二三区| 亚洲少妇综合在线播放| 久久草视频污视频| 激情无码日韩| 中字一区| 国产免费一区在线观看| 少妇蹲下买菜露大唇0| 久久久国产亚洲精品系列| 99蜜桃臀久久久欧美精品网站| 精品人妻视频入口| 欧美激情欧美精品| 香蕉热人人精品| 校园春色中文字幕AV| 久久久久亚洲AV无码专区少妇| 中文字幕人妻色偷偷久久皮| 欧美三四五区| 久久人人爽爽人人爽人人片αV| 欧美性爱一区二区三区四区| 思思热国产在线视频| 亚洲欧美在线综合| 日日碰狠狠添天天爽超| 青青草原香蕉日本Ap| 精品国产一区二区三区av在线资源| 另类欧美综合| 人妻天天操天天爽视频免费| 亚洲AV无码乱码| 欧美日韩亚洲五月天婷婷| 强奸乱伦中文字幕AV| 春色综合免费| 婷婷在线视频| 26uuu成人影片| 欧美熟女丝袜| 大香蕉九九| 国产91福利小视频在线观看| 无码视频一区二区| 久久精品国产亚洲AV无码电影| 成人情色综合网| 98色网| 亚洲性爱免费电影| 国产后入式在线观看| 97精品国产97久久久久久免费| 亚洲欧洲中文日韩女优乱码| 色婷婷淫色网| 中亚精品极乱| 狠狠中文字幕| 熟女精品日韩一区二区三区| av午夜玫瑰| 日韩av不卡在线观看| 天美传媒AV在线播放| 欧美中文狠| 九九亚洲视频| 欧亚性爱在线视频| 青青操在线视频| 欧美熟妇乱码在线一区| 天天色综亚洲91污| 91久久| 人妻精品一区一区三区蜜桃91| 老鸭窝亚洲毛片| 日本一区二区三区四区免费观看| 国产精品剧情| av日韩中文字幕| 四季AV综合网址| 久久激情综合| 一区二区三区黄色片a| 大香蕉淫人网| 亚洲精品国产熟女久久久| 大胆91| 国产精品亚洲一区二区三区四区| 亚洲 无码 偷拍| 欧美色97| 亚洲drav色图| 看黑丝美女操逼青青网站| 久久精彩免费视频| 欧美成人一级免费电影| 日韩欧美福利视频看看| 国产激情在线| 精品妇操一区二区三区| 亚洲码和欧洲精品激情系列| 亚洲精品色| 久久人人爽人人爽人人片Ⅴ| 日日插夜夜| 中文字幕在线免费观看2| 中文字幕成人乱码熟女精品国50 | 欧美一级久久久丰满| 又大又大又大又粗爽高潮观看| 偷拍亚洲情色| 欧洲大香蕉| 久久久久9| 久久亚洲天天做| 久九干| 亚洲 图片 综合91| 91蜜桃婷婷狠狠久久综合9色| 亚洲一区二区中文字幕| 亚洲自拍天堂| 国产一级特黄大片处女| 黄色大片免费在线| 影音先锋日本乱伦| 亚洲自拍偷拍视频在线 | 97国产精品国| 大香蕉色十月| 天堂av2019| www.狠狠干.coom| 亚洲天堂,男人| 欧美色图天堂在线| 丁香五月婷婷五月| 色婷婷av在线观看| 综合激情婷婷| 五月天综合在线| 久久97| 99精品视频在线观看| 婷婷综合五月| 五月丁香六月激情| 亚洲中文制服诱惑| 嗯……啊…嗯嗯…啊…好舒服| 婷婷三区| 久久久不卡区一区二区三区久久久| 97色97好| 97在线观看免费视频l| 被男人吃奶很爽的毛片| 欧美视频一| 日逼逼免费看| 在线可观看的黄色网址| 综合色色网| 中文啪啪视频| 极品少妇99| 97视频在线视频| 一二三四区电影| 欧美在线啊啊| 另类小说综合网| 国产www色在线观看| 91干熟女| 青娱乐日韩无码| 制服诱惑亚洲一区二区三区在线观看| 国产丰满熟夫69mpp| 97精选久久| 好湿好紧视频| 超碰色综合| 波多野结衣先锋影音| 国产精品亚洲免费| 97爱爱爱综合| 高跟伊人julia ann| 亚洲女人毛茸茸91| 97av在线观看| 无码精品久久久天天影视| 天天干天天操天天干天天操| 亚 欧 美 综合| 成人热久久精品| 一本大道久| 高清无码久操视频| 黄色高清无码无码破解免费暗网| 淮穴色AV| AV色图| 亚洲天堂男人的天堂| av网页一区二区三区| 色五月婷婷五月天| 传媒免费一区二区三区| 99re99在线视频| 欧美不卡在线一区二区| 日韩性爱播放| 91天堂视频| 国产区在线| 欧美国产欧美在线观看| 亚洲精品男人的天堂| 天操老女人| 欧美色偷偷| www.av在线观看| 午夜啊啊啊| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 91精品亚洲内射孕妇| 免费AV播放| 97AV在线免费观看| 国产中出内射一区二区| 成视频在线观看免费看| 99蜜桃臀亚洲成人在线观看| 美女网站91| 手机看片1025| 欧美亚洲美少妇一区二区| 日韩亚洲欧美中文字幕| 国产成人自拍视频在线| 老女人碰碰在线碰碰视频| 久久亚洲AV无码白度| 色五月丁香五月| 色网综合网| 免费少妇一区二区| 99热免费| 热热色中文无码| 精品人人插人人操| 嗯~啊~快点 死我视频免费看网站| 天天视频黄| 校园春色综合| 日本二三四区| 开心五月婷婷激情| 天天搞欧美| 黄片aaaaa一区| 久久亚洲人妻| 韩国免费播放一级毛片| 日韩在线视频1234| 麻豆AV一区二区天美传媒| 高清在线偷拍自拍视频| 亚洲国产精品久久久久婷婷老年| 亚洲精品国产熟女| 久久久久9999妇女| 囯戸精品高潮呻吟旡码| 97超碰色屌| 五码视频在线观看| 三上制服丝AV| 日韩免费福利在线观看| 国产一区二区三区不卡手机在线| 亚洲成a人v欧美综合天堂下载| 大香蕉伊人色偷偷在线| 91亚洲综合| 九九热九九热| 2021国产成人精品久久| julia在线观看久久| 欧美成人免费在线观看| 97这里都是精品| 亚洲熟女精品| 少妇内射www在线观看视频| 欧美另类精品xxxx| 欧美日本不卡| 欧美一级A片在线看视频性色| 国产中文字幕在线观看| 免费观看啪视频| 欧美天天综合在线| 91爱综合| 人人做天天爱| 亚洲久久东京热一二三四五区视频| 亚欧Av| 外国免费性情大片| 亚洲人成色9999精品久久| 蜜乳AV免费观看| 内射卯月麻衣| 色色婷婷五月天| 一区在线精品中文字幕| 免费9 1久久| 性做久久久久久久| 外国免费性情大片| 色九九九| 欧美三级中文字幕hd| 日本Suv精品一区二区| xxx亚洲午夜天堂| 蜜乳av一区二区| 99草精| 日韩精品三区四区| 九九久久一区二区伦理| 亚洲欧美骚| 极品少妇99| 欧美日韩第一页| 国产粉嫩蜜臀av一区二区三区 | 久久无码精品| 欧美久久久15P| 精品国产肉丝袜在线拍国语| 性天堂| 91日日夜夜| 久久久久国产亚洲一区欧美色图日韩| 粉嫩av一区二区三区四季| 99re免费| 日韩精品操少妇| www.色综合| 岛国福利在线精品播放| 青青草国产一区二区三区| 97天天爽| 一区二区三区免费岛国片| 中文字幕欧美丝袜07资源| 亚洲欧美在线综合| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 69精品| 亚洲精品一区二区免费在线观看| 久久精品性| 超碰人人妻| 欧美日韩青操| 99少妇内射| 色色色日本| 无码乱人伦中文视频| 九X超碰| 无卡一区=区| 精品国产乱码久久久久久蜜臀| 久久亚洲AV无码白度| a片 xxxx受爽视频| 强奸乱伦免费网站| 日本在线激情一区二区三区 | 亚洲欧美日韩综合在线尤物 | 日韩av在线播放不卡| 一区二区激情国产熟女| 亚洲老司机123专区| 一区二区三区亚洲| 青青草中文-久久青草精品一区二区三 | 色五月AV| 久久久久国产一区二| 欧美激情区| 99在线啪| 夜夜爽33333| 曰韩人妻中文字幕在线| 国产91美女视频| 国产自啪精品视频网站黑丝| 91九九九小逼| 中文字幕日韩精品一区二区三区| 亚州情色j区| 亚洲天堂男人在线| 丁香五月激情综合| 91在线无码精品秘 软件| 久草免费福利在线播放| 日韩高清黄片| 国产精品分类在线观看| 亚洲欧美人妻| 欧美色图亚洲激情| 亚洲欧美首页| 亚洲高清自拍| 97爱综合| 91中出| 亚洲欧美日韩免费观看| 中文字幕蜜乳av| 起碰97| 国产女同在线观看视频| 测评在线观看AV| 日韩无码一级黄色av片| 国产自制av蜜乳| 人人么人人操| 男女做爰猛烈动高潮A片免费应用| 亚洲本色精品一区二区久久| 欧州一区二区三区四区| 女欧美一区二三区| 欧洲综合无码| 久干9操|