gpt4 book ai didi

javascript - 更改 RTCPeerConnection 的 MediaStream

转载 作者:可可西里 更新时间:2023-11-01 01:25:19 27 4
gpt4 key购买 nike

我想从音频/视频流更改为“屏幕共享”流:

peerConnection.removeStream(streamA) // __o_j_sep... in Screenshots below
peerConnection.addStream(streamB) // SSTREAM in Screenshots below
  • streamA是来 self 的相机和麦克风的视频/音频流。
  • streamB是我从扩展程序中获取的屏幕截图。
  • 他们都是MediaStream看起来像这样的对象:

streamA

streamB

* 1 备注

但如果我删除 streamA来自 peerConnectionaddStream(streamB)像上面一样,似乎什么也没发生。

以下按预期工作(两端的流被删除并重新添加)

peerConnection.removeStream(streamA) // __o_j_sep...
peerConnection.addStream(streamA) // __o_j_sep...

更多详情

我找到了 this example它执行“反向”(从屏幕捕获切换到带摄像头的音频/视频)但无法发现显着差异。

peerConnection RTCPeerConnection对象实际上是由这个 SIPML library 创建的source code available here .我这样访问它:

var peerConnection = stack.o_stack.o_layer_dialog.ao_dialogs[1].o_msession_mgr.ao_sessions[0].o_pc

(是的,这看起来不对,但是没有正式的方法来访问对等连接 see discussion here )和 here .

最初我试图只是(例如)更改 streamA 的 videoTracks|使用 streamB 的视频轨道. See question here .有人向我建议我应该尝试重新协商对等连接(通过删除/添加流),因为 addTrack 不会触发 re-negotitation .

I've also asked for help here但是维护者似乎很忙,还没来得及回复。


* 1 备注:为什么streamB没有 videoTracks属性(property)?流以 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 :

videoTrack of streamB

我在运行:

  • OS X 10.9.3
  • Chrome 版本 35.0.1916.153

最佳答案

要回答您的第一个问题,在事件对等连接中修改 MediaStream 时,对等连接对象将触发 onnegotiationneeded 事件。您需要处理该事件并重新交换您的 SDP。这背后的主要原因是双方都知道他们之间正在发送什么流。交换 SDP 时,会包含 mediaStream ID,如果有新 ID 的新流(所有其他条件相同的事件),则必须进行重新协商。

第二个问题(关于 SSTREAM)。它确实包含视频轨道,但 webkitMediaStreams 没有视频轨道属性。但是,您可以通过他们的 ID 获取轨道。

由于每种媒体类型可能有许多轨道,因此视频轨道或音频轨道没有单一属性,而是这样的数组。 .getVideoTracks() 调用返回当前视频轨道的数组。因此,您可以通过指示其索引 .getVideoTracks()[0] 来获取特定的视频轨道。

关于javascript - 更改 RTCPeerConnection 的 MediaStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24239522/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com