更改MediaStream对象的VideoTrack

时间:2014-05-06 14:06:39

标签: javascript google-chrome webrtc

简而言之:我正在尝试更改VideoTrack对象的MediaStream

(文件:https://developer.mozilla.org/en-US/docs/WebRTC/MediaStream_API

我有一个由the sipml library创建的MediaStream对象__o_jsep_stream_audiovideo

__o_jsep_stream_audiovideo看起来像这样:

stream object

所以它有一个 AudioTrack和一个 VideoTrack。起初,VideoTrack来自用户摄像头(例如label: "FaceTime Camera")。

根据the Documentation

  

MediaStream由零个或多个MediaStreamTrack对象组成,代表各种音频或视频轨道。

所以我们应该很好地为此流添加更多曲目。

我正在尝试将VideoTrack与另一个视频流进行切换/交换。另一个视频流(streamB)来自Chromes ScreenCapture api(label: "Screen"

streamB

我试过了:

__o_jsep_stream_audiovideo.addTrack(streamB.getVideoTracks()[0])

似乎没有任何影响。

我也尝试直接指定videoTracks(我知道这绝望)。

我一定错过了一些明显可以指向正确方向的东西吗?

我正在运行

  • Chrome(版本34.0.1847.131)和
  • 金丝雀(版本36.0.1976.2金丝雀)
  • OSX 10.9.2

2 个答案:

答案 0 :(得分:2)

在MediaStream对象do not signal a renegotiation上添加和删除曲目,并且MediaStream也有两个same type in chrome曲目的问题。

您可能只需将单独的媒体流添加到对等连接,以便它可以触发重新协商并处理流。 chrome中的Track添加/删除功能非常幼稚,并且不是非常精细,您应尽可能远离它。

答案 1 :(得分:0)

当你谈到改变视频轨道时,我们指的是两个方面:

  1. 更改远程视频(其他人可以从您那里看到的内容)
  2. 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);
        });
    });
    
    1. 更改您的显示视频(您看到自己)
    2. 最好只添加一个新的视频元素(或使用现有的视频元素)但是将srcObject分配给新捕获的流