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慣用的な方法はありますか?
こんにちは@philnash。申し訳ありません - trackAddedハンドラは実際に各参加者のtrackAddedイベントに登録されています。ルーム引数が必要な理由は、コールバック中に部屋にアクセスできるように、プライベートプロパティ: 'room._signaling._peerConnectionManager._peerConnections'にアクセスできるようにするためです。上で述べたように、mediaStreamTrackプロパティは、Web Audio APIを操作しようとしているときには役に立ちません。 AudioContext.createMediaStreamSource(MediaStream)を呼び出すには、MediaStreamへの参照が必要です(MediaStreamTracks自体にプロパティがあります)。 – thequickbrownfox
ああ、ごめんなさい!あなたは 'mediaStreamTrack'を使って新しい' MediaStream'オブジェクトを作ることができます。 'var ms = new MediaStream(track.mediaStreamTrack);そしてそれをWebAudio API内で使用します。 – philnash