使用jsSIP 3.2.4对接Asterisk:浏览器无法播放远端音频求助
解决jsSIP 3.2.4与Asterisk对接时浏览器无法播放应答音频的问题
我来帮你搞定这个jsSIP和Asterisk对接时的音频播放问题,结合你用的3.2.4版本,咱们一步步调整:
一、替换废弃的事件监听(核心问题)
你提到的addstream事件在jsSIP 3.x里确实被移除了,而且peerconnection事件也不是获取远程音频的正确时机。咱们换成3.x版本推荐的方式:
方案1:监听track事件(推荐)
这个事件会在远程媒体轨道添加时触发,是替代addstream的官方方案:
myPhone.on('newRTCSession', function(data) { const session = data.session; // 监听远程媒体轨道添加事件 session.on('track', function(e) { // 只处理音频轨道 if (e.track.kind === 'audio') { // 创建媒体流并绑定到audio元素 const remoteStream = new MediaStream(); remoteStream.addTrack(e.track); remoteAudio.srcObject = remoteStream; // 处理浏览器自动播放限制(后面会讲) tryPlayAudio(remoteAudio); } }); });
方案2:在会话确认后获取流
当会话进入confirmed状态(也就是通话建立完成),可以直接从peerConnection中获取远程流:
myPhone.on('newRTCSession', function(data) { const session = data.session; session.on('confirmed', function() { const remoteStreams = session.peerConnection.getRemoteStreams(); if (remoteStreams.length > 0) { remoteAudio.srcObject = remoteStreams[0]; tryPlayAudio(remoteAudio); } }); });
二、处理浏览器自动播放限制
现在几乎所有现代浏览器都禁止无用户交互的自动音频播放,这是很多人忽略的坑。咱们加个辅助函数来处理这个问题:
function tryPlayAudio(audioElement) { // 先尝试直接播放 audioElement.play().catch(err => { // 播放失败时,监听用户交互事件(点击/触摸) const handleUserAction = () => { audioElement.play(); // 完成后移除监听,避免重复触发 document.removeEventListener('click', handleUserAction); document.removeEventListener('touchend', handleUserAction); }; document.addEventListener('click', handleUserAction); document.addEventListener('touchend', handleUserAction); console.log('需要用户交互才能播放音频,请点击页面任意位置'); }); }
三、验证Asterisk的媒体配置
如果上面的代码调整后还是没声音,得检查Asterisk的配置:
- 确保SIP分机/ trunk的配置里开启了常用音频编码,比如
allow=ulaw,alaw(和jsSIP的编码配置保持一致) - 检查Asterisk的RTP端口范围(默认是10000-20000)是否开放,没有被防火墙/安全组阻挡
- 在Asterisk控制台执行
rtp set debug on,查看是否有RTP媒体流发送到你的浏览器IP和端口,确认媒体传输正常
四、补充jsSIP初始化配置检查
确保你初始化jsSIP时开启了音频支持:
const config = { sockets: [new jsSIP.WebSocketInterface('wss://你的Asterisk地址:8089/ws')], uri: 'sip:你的用户名@你的域名', password: '你的密码', media: { audio: true, // 必须开启音频 video: false } }; const myPhone = new jsSIP.UA(config);
内容的提问来源于stack exchange,提问作者Игорь Быстревский
相关产品推荐
相关产品推荐

