2017-06-30 28 views
0

我有一个项目https://github.com/njovy/AppRTCDemo。这个项目工作1 -1调用。我修改了PeerConnectionClient.class:Android WebRTC - 创建1-N电话

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]; 

这里https://pastebin.com/c0YCHS6g。我的呼叫活动:https://pastebin.com/8RVwVZRq

回答

0

的Android的WebRTC - 创建1-N电话是什么N这里的价值?

如果N > 4您需要使用媒体中继服务器(SFU/SVC)服务器,否则移动设备将会死亡!对于N个远程参与者,WebRTC将执行N次编码(它将吃掉N次电池),并且将流传送给N个参与者,它将消耗N倍带宽(你无法想象它在3G/4G中)。

根据Janus/Jitsi/Kurento/Licode/red5/switchrtc/wowza等用户的使用情况选择媒体服务器。

如果N <= 4
你需要重构peerConnectionClinet分成两个部分。
1. Singleton Factory:主对等连接工厂& MediaStream/MediaTracks
2. PC实例:从Singleton Factory创建一个peerConnection,并将相同的流添加到所有实例。此pc实例负责为每个端点提供/答复/候选人交换。