Android WebRTC-创建1-N呼叫

Android WebRTC-创建1-N呼叫,android,webrtc,Android,Webrtc,我有一个项目。这个项目可以处理1-1个调用。我修改了PeerConnectionClient.class: private static final PeerConnectionClient instance = new PeerConnectionClient(); // private final PCObserver pcObserver = new PCObserver(); private final PCObserver[] pcObservers = new PCO

我有一个项目。这个项目可以处理1-1个调用。我修改了PeerConnectionClient.class:

private static final PeerConnectionClient instance = new PeerConnectionClient();
    // private final PCObserver pcObserver = new PCObserver();
    private final PCObserver[] pcObservers = new PCObserver[MAX_CONNECTIONS];
    // private final SDPObserver sdpObserver = new SDPObserver();
    private final SDPObserver[] sdpObservers = new SDPObserver[MAX_CONNECTIONS];
    private final LooperExecutor executor;

    private static final int MAX_CONNECTIONS = 3;

    private PeerConnectionFactory factory;
    private PeerConnection[] peerConnections = new PeerConnection[MAX_CONNECTIONS];
    PeerConnectionFactory.Options options = null;
    private VideoSource videoSource;
    private boolean videoCallEnabled;
    private boolean audioCallEnabled;
    private boolean preferIsac;
    private boolean preferH264;
    private boolean videoSourceStopped;
    private boolean isError;
    private Timer statsTimer;
    private VideoRenderer.Callbacks localRender;   
    private VideoRenderer.Callbacks[] remoteRenders;
    private SignalingParameters signalingParameters;
    private MediaConstraints pcConstraints;
    private MediaConstraints videoConstraints;
    private MediaConstraints audioConstraints;
    private MediaConstraints sdpMediaConstraints;
    private PeerConnectionParameters peerConnectionParameters;
    // Queued remote ICE candidates are consumed only after both local and
    // remote descriptions are set. Similarly local ICE candidates are sent to
    // remote peer after both local and remote description are set.
    private LinkedList<IceCandidate>[] queuedRemoteCandidateLists = new LinkedList[MAX_CONNECTIONS];
    private PeerConnectionEvents events;
    private boolean[] isConnectionInitiator = new boolean[MAX_CONNECTIONS];
    private SessionDescription[] localSdps = new SessionDescription[MAX_CONNECTIONS]; // either offer or answer SDP
    private MediaStream mediaStream;
    private int numberOfCameras;
    private VideoCapturerAndroid videoCapturer;
    // enableVideo is set to true if video should be rendered and sent.
    private boolean renderVideo;
    private VideoTrack localVideoTrack;
    private VideoTrack[] remoteVideoTracks = new VideoTrack[MAX_CONNECTIONS];
private static final PeerConnectionClient实例=new PeerConnectionClient();
//私人最终PCObserver PCObserver=新PCObserver();
专用最终PCObserver[]PCObserver=新PCObserver[最大连接数];
//私有最终SDPObserver SDPObserver=新SDPObserver();
专用最终SDPObserver[]SDPObserver=新SDPObserver[MAX_CONNECTIONS];
私人最终环路执行人;
专用静态最终int MAX_连接=3;
私人PeerConnection工厂;
专用对等连接[]对等连接=新对等连接[最大连接];
PeerConnectionFactory.Options=null;
私有视频源;
可调用的私有布尔值;
可调用的私有布尔值;
ISAC的私有布尔值;
私有布尔值为264;
私有布尔视频源停止;
私有布尔isError;
专用定时器statsTimer;
私有视频渲染器。回调localRender;
私有VideoRenderer.Callbacks[]远程渲染;
专用信号参数信号参数;
私人媒体约束和培训;
私人媒体限制;
私有媒体限制和音频限制;
私有媒体约束sdpMediaConstraints;
专用PeerConnectionParameters PeerConnectionParameters;
//排队的远程ICE候选者仅在本地和
//远程描述已设置。同样,当地的ICE候选人也被派往
//设置本地和远程描述后的远程对等。
private LinkedList[]QueuedRemoteCandidateList=新建LinkedList[MAX_CONNECTIONS];
专用对等连接事件;
私有布尔值[]isConnectionInitiator=新布尔值[MAX_CONNECTIONS];
private SessionDescription[]localSdps=新SessionDescription[MAX_CONNECTIONS];//提供或回答SDP
私有媒体流;
私人摄像机;
专用视频捕获器和ROID视频捕获器;
//如果应该渲染和发送视频,则enableVideo设置为true。
私有布尔renderVideo;
私有视频跟踪本地视频跟踪;
专用VideoTrack[]remoteVideoTracks=新VideoTrack[最大连接数];
就像这里一样。我的呼叫活动:

Android WebRTC-创建
1-N
呼叫,这里
N
的值是多少?

如果
N>4
您需要使用媒体中继服务器(SFU/SVC)服务器,否则移动设备将死亡
对于N个远程参与者,WebRTC将进行N次编码(它将消耗N次CPU和电池),并且将流中继到N个参与者,它将消耗N倍的带宽(在3G/4G中是无法想象的)

根据您的用例从Janus/Jitsi/Kurento/Licode/red5/switchrtc/wowza和更多地方选择媒体服务器

如果
N