You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter WebRTC中用setCodecPreferences设置PCMU及采样帧为640?

Flutter WebRTC 配置PCMU编码及自定义帧采样数

一、用setCodecPreferences指定PCMU编码

要强制使用PCMU音频编码,核心是从PeerConnection支持的编解码器列表中筛选出PCMU,再通过setCodecPreferences设置为首选:

  1. 先获取当前PeerConnection的音频发送器支持的编解码器列表
  2. 筛选出MIME类型为audio/PCMU的编解码器(大小写不敏感)
  3. 在创建SDP Offer/Answer之前,调用setCodecPreferences传入筛选后的编解码器

示例代码:

// 假设pc是已初始化的RTCPeerConnection实例
final audioSender = pc.getSenders().firstWhere((sender) => sender.track?.kind == 'audio');
final rtpParams = await audioSender.getParameters();

// 筛选PCMU编解码器
final pcmuCodec = rtpParams.codecs.firstWhere(
  (codec) => codec.mimeType.toLowerCase() == 'audio/pcmu',
  orElse: () => throw StateError('当前环境不支持PCMU编码'),
);

// 设置仅使用PCMU编码
await pc.setCodecPreferences([pcmuCodec]);

注意:必须在调用createOffer或createAnswer之前设置编解码器偏好,否则SDP不会包含指定的编码配置。

二、设置PCMU每帧采样数为640

PCMU默认基于8kHz采样率,每20ms生成一帧(对应160个采样点)。要得到640采样点的帧,需要将帧时长设置为80ms(8000Hz × 0.08s = 640),可以通过以下步骤实现:

  1. 在获取音频媒体流时,通过MediaConstraints指定frameSize为80(单位:毫秒)
  2. 配置RTCPeerConnection的音频发送参数,同步帧时长设置

示例代码:

// 构造音频约束,指定帧大小为80ms
final audioConstraints = MediaConstraints(
  mandatory: {
    'frameSize': '80', // 80ms对应640采样点
    // 可选:关闭WebRTC默认的音频处理,避免干扰
    'echoCancellation': 'false',
    'googAutoGainControl': 'false',
    'googNoiseSuppression': 'false',
  },
);

// 获取符合约束的音频流
final audioStream = await navigator.mediaDevices.getUserMedia({
  'audio': audioConstraints.toMap(),
});

// 将音频轨道添加到PeerConnection
final audioSender = await pc.addTrack(audioStream.getAudioTracks()[0], audioStream);

// 配置RTP发送参数,确保帧时长生效
final rtpParams = await audioSender.getParameters();
for (final encoding in rtpParams.encodings) {
  encoding.maxPacketTime = 80; // 强制每80ms发送一个RTP包
}
await audioSender.setParameters(rtpParams);

注意事项:

  • 并非所有移动端平台都支持自定义音频帧大小,需要针对Android/iOS分别测试兼容性
  • 摄像头端必须同步配置相同的帧时长(80ms/640采样点),否则会出现音频解码失败或不同步的问题

内容的提问来源于stack exchange,提问作者viki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 12:33:38