Google Nest电池版门铃Flutter API集成:双向音频问题咨询
Flutter集成Google电池版门铃API:音频发送失败问题解决
核心问题:a=recvonly的影响
SDP Offer里的a=recvonly字段明确指定当前端的媒体流方向为仅接收,这就是你无法向门铃发送音频流的直接原因——这个约束会阻止设备向对端推送任何媒体流,包括麦克风音频。
你的代码问题
你启用本地音频轨道并添加到PeerConnection的操作本身没有语法错误,但在a=recvonly的约束下,这些操作无法生效,因为SDP的媒体方向优先级高于轨道启用状态。
可行的解决步骤
- 确认设备/API支持双向音频:先查阅Google电池版门铃的官方文档,确认该型号是否支持接收音频(部分入门款仅支持单向通话),以及API是否允许发起双向媒体会话。
- 修改SDP的媒体方向:如果API允许自定义SDP,在创建Offer后手动修改SDP内容,把音频部分的
a=recvonly替换为a=sendrecv(双向收发),再设置为本地描述:
var offer = await _peerConnection!.createOffer(); // 替换音频流的方向约束 var modifiedSdp = offer.sdp?.replaceAll('a=recvonly', 'a=sendrecv'); if (modifiedSdp != null) { await _peerConnection!.setLocalDescription( RTCSessionDescription(modifiedSdp, offer.type) ); }
- 检查权限与配置:确保Flutter应用已获取麦克风权限,Android端在
AndroidManifest.xml添加<uses-permission android:name="android.permission.RECORD_AUDIO"/>,iOS端在Info.plist添加NSMicrophoneUsageDescription;同时确认PeerConnection初始化时的媒体约束允许发送音频。 - 排查API会话初始化参数:如果是通过Google的API初始化媒体会话,检查是否有参数可以指定媒体方向为双向,比如在请求视频流的接口中加入双向音频的标识。
内容的提问来源于stack exchange,提问作者Amila Ranatunga
相关产品推荐
相关产品推荐

