Webrtc aiortc - addTrack 在数据通道消息接收处理程序内失败

问题描述 投票:0回答:1

我在 aiortc repo 示例中使用了服务器文件夹作为基点。然后我做了一些修改以实现以下目标(我只对音频部分感兴趣):

  1. 浏览器最初仅发送音频,尚未添加来自远程对等点(Python 服务器)的曲目

  2. 在“停止”按钮上,数据通道用于向远程对等点(服务器)发送“已跟踪”消息

  3. 在远程对等点(服务器)上,初始化播放器,然后添加曲目

  4. (预期)浏览器应该看到轨道事件,然后开始播放通过该轨道发送的音频(wav)

    //连接音频/视频 pc.addEventListener('track', (evt) => { if (evt.track.kind == '视频') document.getElementById('video').srcObject = evt.streams[0]; 别的 document.getElementById('音频').srcObject = evt.streams[0]; });

步骤 1/2/3 效果很好。但是,第 4 步不会发生。我在这里附上了差异。我想知道这是否有限制?

注意:我不得不诉诸上述复杂的技术,因为从浏览器关闭轨道时不会调用 @track.on("end") 。

服务器.py 客户端.js

webrtc aiortc
1个回答
0
投票

添加曲目需要新的 SDP Offer/answer 交换。所以在服务器端你需要这样做:

    pc.addTrack(player.audio)
    offer = await pc.createOffer()
    await pc.setLocalDescription(offer)
    # send the offer via datachannel or in some other way
    # .....
    # wait for the answer, then:
    await peer_connection.setRemoteDescription(answer)

需要交换,因为对等方需要协商媒体的编解码器参数。

© www.soinside.com 2019 - 2024. All rights reserved.