gpt4 book ai didi

java - Android WebRTC - 为 session 混合音轨

转载 作者:行者123 更新时间:2023-11-30 10:38:47 26 4
gpt4 key购买 nike

我正在尝试解决 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

关于如何实现它的任何指示?谢谢

最佳答案

我相信您在多连接中向双方(乙方和丙方)发送相同的本地流,因为如果您尝试为不同的连接创建不同的本地流,它将抛出错误,因为它将尝试访问麦克风又是相机,这是不可能的(我相信)。

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

stream = sessionFactory.createLocalMediaStream(LOCAL_MEDIA_ID);

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

  • step1--在甲方和乙方之间创建p2p连接
  • step2--在甲方和丙方之间创建p2p连接
  • 第 3 步——当您添加本地流时,您会这样调用

    peerconnection2.addStream(myStream)

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

用于从丙方向乙方发送远程流:

  • 假设您与 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)时,您将获得空音轨....在那种情况下,您将不得不立即发送挂断也向对方提出请求。

关于java - Android WebRTC - 为 session 混合音轨,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39579653/

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