2

我正在尝试解决 WebRTC Native Android 的问题。我已经成功地将 AppRTCDemo 从 1-1 调用调整为 1-N 调用。目前我有以下情况:

  • A(我)可以和B说话/听B
  • A(我)可以和C说话/听C
  • B 和 C 不能互相交谈或听对方说话。

为了实现这一点,我 (A) 分别与 B 和 C 有 2 个 PeerConnections。我知道我需要混合一些媒体流或音轨的方式,或者换句话说:

  • 混合 (A, B) -> 发送到 C

  • 混合 (A, C) -> 发送到 B

关于如何实现这一点的任何指示?谢谢

4

1 回答 1

1

我相信您在多连接中向双方(B 方和 C 方)发送相同的本地流,因为如果您尝试为不同的连接创建不同的本地流,它将引发错误,因为它会再次尝试访问麦克风和摄像头这是不可能的(我相信)。

您必须像这样创建本地流:

stream = sessionFactory.createLocalMediaStream(LOCAL_MEDIA_ID);

要将 Party-B 的流发送到 Party-C,您可以这样做:

  • step1--在甲方和乙方之间建立p2p连接
  • step2--在party-A和party-C之间建立p2p连接
  • step3——当你添加本地流时,你会调用这样的东西

    peerconnection2.addStream(myStream)
    

代替 myStream(用于与 C 的对等连接),您可以添加 remoteStreamB(您从 B 获得的远程流)。这会将您从 B 获取的流添加为与 C 的第二个 peerconnection 中的 localstream。

用于从 Party-C 向 Party-B 发送远程流:

  • 假设您与 Party-B 有 peerconnection1。要首先将来自 C 的远程流添加为本地流,您必须删除当前曲目,然后添加新曲目。
  • 为此你可以做这样的事情

    AudioTrack t1 = mystream.audioTracks.get(0);
    VideoTrack v1 = myStream.videoTracks.get(0);
    if(myStream.removeTrack(t1)){
     if(myStream.removeTrack(v1)){
      t1 = remoteStreamC.audioTracks.get(0);
      v1 = remoteStreamC.videoTracks.get(0);
    
      myStream.addTrack(t1);
      myStream.addTrack(v1);
     }
    }
    

    通过这种方式,您将更改要发送到 B 的本地流的内容。现在该流将包含来自 remotestreamC 的音频和视频轨道。

但是为了使这个过程没有错误,您将不得不使用错误处理,因为当有人断开连接(B 或 C)时,您将获得空轨道......在这种情况下,您必须立即将挂断请求发送到另一方也是。

于 2016-09-24T18:29:54.353 回答