简而言之:我正在尝试更改VideoTrack
对象的MediaStream
。
(文件:https://developer.mozilla.org/en-US/docs/WebRTC/MediaStream_API)
我有一个由the sipml library创建的MediaStream对象__o_jsep_stream_audiovideo
。
__o_jsep_stream_audiovideo
看起来像这样:
所以它有一个 AudioTrack和一个 VideoTrack。起初,VideoTrack来自用户摄像头(例如label: "FaceTime Camera"
)。
MediaStream由零个或多个MediaStreamTrack对象组成,代表各种音频或视频轨道。
所以我们应该很好地为此流添加更多曲目。
我正在尝试将VideoTrack与另一个视频流进行切换/交换。另一个视频流(streamB
)来自Chromes ScreenCapture api(label: "Screen"
)
我试过了:
__o_jsep_stream_audiovideo.addTrack(streamB.getVideoTracks()[0])
似乎没有任何影响。
我也尝试直接指定videoTracks(我知道这绝望)。
我一定错过了一些明显可以指向正确方向的东西吗?
我正在运行
答案 0 :(得分:2)
在MediaStream对象do not signal a renegotiation上添加和删除曲目,并且MediaStream也有两个same type in chrome曲目的问题。
您可能只需将单独的媒体流添加到对等连接,以便它可以触发重新协商并处理流。 chrome中的Track添加/删除功能非常幼稚,并且不是非常精细,您应尽可能远离它。
答案 1 :(得分:0)
当你谈到改变视频轨道时,我们指的是两个方面:
WebRTC获得了这样做的新版本,因为它弃用了addStream / removeStream。 然而,优点是他们引入了新的界面replaceTrack
stream.getTracks().forEach(function(track) {
// remote
qcClient.calls.values().forEach(function(call) {
var sender = call.pc.getSenders().find(function(s) {
return s.track.kind == track.kind;
});
sender.replaceTrack(track);
});
});
最好只添加一个新的视频元素(或使用现有的视频元素)但是将srcObject分配给新捕获的流