根据RTCPeerConnection.ontrack文档,"ontrack"事件应该针对每个传入的流进行触发。我有一个带有两个视频流的PeerConnection,在连接后,"ontrack"触发了两次(到此为止一切正常)。但是它两次发送出相同的流,因此我最终得到了两个相同的视频。我确信发送方正在发送两个不同的流,它们的尺寸和帧速率不同,并且我可以在chrome://webrtc-internals/中清楚地看到2个视频流具有不同的帧大小/速率。
这是PeerConnection ontrack代码:
this.peerConnection.ontrack = function(evt) {
console.log("PeerConnection OnTrack event: ", evt.streams);
that.emit('onRemoteStreamAdded', evt.streams);
};
我并不假设evt.streams
只有一个对象,因此我没有写成evt.streams[0]
。
从日志中可以明显看出getRemoteStreams()
仅返回一个对象。如果只有一个流,为什么ontrack
会触发两次,并且第二个RTCRtpTransceiver没有产生新的流?
addTrack(track)
而不是addTrack(track, stream)
吗?如果是这样的话,那么这种行为就可以解释了,因为所有内容都会进入接收器上的一个通用 MediaStream 中。这通常被认为不是一个好主意。 - Philipp Hancke