2017-05-10 9 views
0

Twilioプログラマブルビデオルームでリモート参加者のオーディオストリームを操作するためにWeb Audio APIを使用しようとしています。Twilioプログラマブルビデオ - WebオーディオAPIとの統合

あなたはウェブオーディオAPIでそれを使用することが

track.mediaStreamTrack

を呼び出すことにより、自明onTrackAddedハンドラ内の各トラックに対応しMediaStreamTrackへのアクセスを得ることができます - あなたはとても MediaStreamへの参照を持っている必要があります audioContext.createMediaStreamSourceNode(stream)に電話することができます。 MediaStreamオブジェクトには多くのMediaStreamTrackを含めることができます。 (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

特定の参加者に対応MediaStreamのへの参照を取得するために、よりTwilio慣用的な方法はありますか?

答えて

0

ここではTwilioの開発者エバンジェリストです。

部屋のtrackAddedイベントを聞くのではなく、trackAdded for each participantを聞くことができます。そうすれば、トラックと参加者をより簡単に関連付けることができます。 participantConnected event on a roomを聞いて、参加者が部屋に入ったときに各参加者を待つことができます。

trackAddedイベントを取得したら、Track object and get the underlying MediaStreamTrack by using the mediaStreamTrack propertyを使用できます。

+0

こんにちは@philnash。申し訳ありません - trackAddedハンドラは実際に各参加者のtrackAddedイベントに登録されています。ルーム引数が必要な理由は、コールバック中に部屋にアクセスできるように、プライベートプロパティ: 'room._signaling._peerConnectionManager._peerConnections'にアクセスできるようにするためです。上で述べたように、mediaStreamTrackプロパティは、Web Audio APIを操作しようとしているときには役に立ちません。 AudioContext.createMediaStreamSource(MediaStream)を呼び出すには、MediaStreamへの参照が必要です(MediaStreamTracks自体にプロパティがあります)。 – thequickbrownfox

+0

ああ、ごめんなさい!あなたは 'mediaStreamTrack'を使って新しい' MediaStream'オブジェクトを作ることができます。 'var ms = new MediaStream(track.mediaStreamTrack);そしてそれをWebAudio API内で使用します。 – philnash

関連する問題