我想从音频/视频流更改为“屏幕共享”流:
peerConnection.removeStream(streamA) // __o_j_sep... in Screenshots below
peerConnection.addStream(streamB) // SSTREAM in Screenshots below
streamA
是来自我的相机和麦克风的视频/音频流。streamB
是我从我的扩展中获得的屏幕截图。- 它们都是MediaStream对象,如下所示:
* 1 备注
但是,如果我streamA
从上面的peerConnection
and addStream(streamB)
like 中删除,似乎什么也没有发生。
以下按预期工作(两端的流被删除并重新添加)
peerConnection.removeStream(streamA) // __o_j_sep...
peerConnection.addStream(streamA) // __o_j_sep...
更多细节
我已经找到这个例子是“相反的”(从屏幕捕捉切换到带摄像头的音频/视频),但无法发现显着差异。
RTCPeerConnection对象实际上是由这里提供的这个peerConnection
SIPML库 源代码创建的。我像这样访问它:
var peerConnection = stack.o_stack.o_layer_dialog.ao_dialogs[1].o_msession_mgr.ao_sessions[0].o_pc
(是的,这看起来不对,但没有官方方法可以访问对等连接,请参阅此处的讨论)和此处。
最初我试图只是(交换)将 videoTracks 更改streamA
为streamB
. 请参阅此处的问题。有人建议我应该尝试重新协商对等连接(通过删除/添加流到它),因为 addTrack 不会触发re-negotiation。
我也在这里寻求帮助,但维护人员似乎很忙,还没有机会回复。
* 1备注:为什么没有streamB
属性videoTracks
?流在 HTML<video>
元素中播放,似乎“工作”。这是我得到它的方法:
navigator.webkitGetUserMedia({
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: streamId,
maxWidth: window.screen.width,
maxHeight: window.screen.height
//, maxFrameRate: 3
}
}
// success callback
}, function(localMediaStream) {
SSTREAM = localMediaStream; //streamB
// fail callback
}, function(error) {
console.log(error);
});
它似乎也有一个videoTrack
:
我在跑:
- OS X 10.9.3
- Chrome 版本 35.0.1916.153