【问题标题】:Twilio Programmable video - Integrating with Web Audio APITwilio 可编程视频 - 与 Web 音频 API 集成
【发布时间】:2017-05-10 00:36:37
【问题描述】:

我正在尝试使用 Web 音频 API 来操纵 Twilio 可编程视频室中远程参与者的音频流。

您可以通过调用 track.mediaStreamTrack 轻松访问与 onTrackAdded 处理程序中的每个 Track 对应的 MediaStreamTrack

但是,如果要将其与 Web 音频 API 一起使用 - 您必须引用 MediaStream,以便您可以调用 audioContext.createMediaStreamSourceNode(stream)。我的理解是一个 MediaStream 对象可以包含许多 MediaStreamTracks。 (使其更类似于 Twilio 抽象中的参与者对象)。

我通过使用 twilio 客户端提供的房间构造的私有属性找到了解决此问题的方法,但它非常难看:

function trackAdded(track, room) {
// Check if it is an audio node
if (track.kind.toLowerCase() === 'audio') {
    // Find the relevant pc to get the stream from
    var remotePC;
    room.room._signaling._peerConnectionManager._peerConnections.forEach(function(pc) {
        var remoteStream = pc.getRemoteStreams()[0]
        if (remoteStream.getAudioTracks()[0] === track.mediaStreamTrack) {
            // This is the pc we are interested in
            console.log('found PC to connect to audio API');
            remotePC = pc;
        }
    })
    var origin = context.createMediaStreamSource(remotePC.getRemoteStreams()[0]);
    origin.connect(<Chain of filter Nodes>)
}

我想我的问题是,有没有办法在 JS 中获取对 MediaStreamTrack 的 MediaStream 容器的引用?

是否有更符合 Twilio 习惯的方式来获取对对应于特定参与者的 MediaStream 的引用?

【问题讨论】:

    标签: video webrtc twilio web-audio-api


    【解决方案1】:

    这里是 Twilio 开发者宣传员。

    您可以收听trackAdded for each participant,而不是在房间上收听trackAdded 事件。这样您就可以更轻松地关联轨道和参与者。您可以通过收听participantConnected event on a room 来了解每个参与者加入房间时的情况。

    收到trackAdded 事件后,您可以使用Track object and get the underlying MediaStreamTrack by using the mediaStreamTrack property

    【讨论】:

    • 嗨@philnash。抱歉 - trackAdded 处理程序确实在每个参与者的 trackAdded 事件中注册。它采用 room 参数的原因是,在回调期间我可以访问房间,以便我可以访问私有属性:room._signaling._peerConnectionManager._peerConnections。正如我上面提到的 - mediaStreamTrack 属性在尝试使用 Web 音频 API 时没有帮助。至于调用 AudioContext.createMediaStreamSource(MediaStream),您需要引用 MediaStream(它本身具有 mediaStreamTracks 作为属性)。
    • 哦,我明白了,对不起!您可以只使用mediaStreamTrack 来构造一个新的MediaStream 对象。 var ms = new MediaStream(track.mediaStreamTrack); 然后在 WebAudio API 中使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多