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

寻求仅基于WebRTC实现音频通话的代码示例及免费服务支持

WebRTC 纯音频通话代码示例与免费服务选项

纯音频通话核心代码示例

下面是一个极简的纯音频通话前端实现,完全剔除视频相关逻辑,专注音频流处理:

初始化本地音频与PeerConnection

// 获取本地音频流
async function getLocalAudioStream() {
  try {
    const stream = await navigator.mediaDevices.getUserMedia({
      audio: true,
      video: false // 明确禁用视频模块
    });
    // 绑定本地音频到页面元素(可选,用于监听自身声音)
    const localAudio = document.getElementById('local-audio');
    localAudio.srcObject = stream;
    return stream;
  } catch (err) {
    console.error('音频流获取失败:', err);
  }
}

// 创建仅处理音频的PeerConnection实例
function createPeerConnection(isInitiator, localStream) {
  const pc = new RTCPeerConnection({
    iceServers: [
      { urls: 'stun:stun.l.google.com:19302' } // 免费公共STUN服务器
    ]
  });

  // 将本地音频轨道添加到连接
  localStream.getAudioTracks().forEach(track => {
    pc.addTrack(track, localStream);
  });

  // 监听并播放远程音频流
  pc.ontrack = (event) => {
    const remoteAudio = document.getElementById('remote-audio');
    remoteAudio.srcObject = event.streams[0];
  };

  // ICE候选处理(模拟信令传输,实际需通过服务器转发)
  pc.onicecandidate = (event) => {
    if (event.candidate) {
      console.log('待发送ICE候选:', JSON.stringify(event.candidate));
    }
  };

  // 发起方创建通话Offer
  if (isInitiator) {
    pc.createOffer().then(offer => {
      return pc.setLocalDescription(offer);
    }).then(() => {
      console.log('待发送Offer:', JSON.stringify(pc.localDescription));
    });
  }

  return pc;
}

// 接收方处理收到的Offer
async function handleOffer(pc, offerData) {
  await pc.setRemoteDescription(new RTCSessionDescription(offerData));
  const answer = await pc.createAnswer();
  await pc.setLocalDescription(answer);
  console.log('待发送Answer:', JSON.stringify(pc.localDescription));
}

// 发起方处理收到的Answer
async function handleAnswer(pc, answerData) {
  await pc.setRemoteDescription(new RTCSessionDescription(answerData));
}

// 处理对方发送的ICE候选
async function handleIceCandidate(pc, candidateData) {
  await pc.addIceCandidate(new RTCIceCandidate(candidateData));
}

配套基础HTML结构

<audio id="local-audio" autoplay muted></audio>
<audio id="remote-audio" autoplay></audio>
<button onclick="initCall(true)">发起通话</button>
<button onclick="initCall(false)">接听通话</button>

<script>
let localStream;
let pc;

async function initCall(isInitiator) {
  localStream = await getLocalAudioStream();
  pc = createPeerConnection(isInitiator, localStream);
}
// 放入上方JavaScript代码
</script>

说明:示例中信令传输用控制台输出模拟,实际测试时需搭建简单信令服务(比如Node.js+WebSocket),用于传递Offer、Answer和ICE候选数据。

免费WebRTC音频通话服务提供商

  • Google STUN服务器:免费公共STUN服务,无需注册,直接用于获取网络地址,适合基础连通性测试。
  • Twilio免费额度:提供免费WebRTC服务额度,支持纯音频通话,小流量测试完全够用,可用于探索扩展性。
  • Agora免费套餐:包含免费通话分钟数,支持纯音频场景,配置简单,快速搭建测试环境。
  • Daily免费版:提供免费房间通话服务,支持多人音频通话,免费版有并发限制但满足初期探索需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:06:08