RTCPeerConnection.connectionStateがconnectedになっていて、
きちんとMediaStreamが届いているはずなのになぜかontrackが呼ばれなかった時に取った回避策
connection.onconnectionstatechange = () => {
if (connection.connectionState === 'connected') {
const tracks = connection.getReceivers().map(r => r.track);
const stream = new MediaStream(tracks);
//MediaStreamを使った処理
}
}
解説
- connectionState === 'connected'は接続完了。普通はconnectionStateが一つ前の'connecting'の間にtrackイベントが発生してontrackに登録された処理が走る
- Remoteから受け取ったMediaTrackは受け取ったRTCRtpReceiverに保持され、trackプロパティから取得できる
- ontrack時にeventから取得できるMediaStreamはMediaTrackの配列を引数に手動で生成できる