Twilio可编程视频 - 与Web Audio API集成

时间:2017-05-10 00:36:38

标签: video webrtc twilio web-audio-api

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

通过调用track.mediaStreamTrack

,您可以轻松访问onTrackAdded Handler中每个Track对应的MediaStreamTrack。

但是要将其与Web Audio 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容器?

OR

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

1 个答案:

答案 0 :(得分:0)

Twilio开发者传道者在这里。

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

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