我尝试使用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的引用?
答案 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。