2016-08-04 19 views
5

Android uygulamasında WebRTC'yi uygulamak zorundayım, bunun için libjingle kütüphanesi, ver-11139 kullanıyorum. Bu ben her zaman pc(PeerConnection class instance) olsun her zaman null olsun. BenPeerConnection örneği her zaman null?

factory(PeerConnectionFactory) 
iceServers(LinkedList<IceServers> 
mediaConstraints 
Peer.this(PCObserver interface)) 

değerlerini kontrol ettiniz ama bunların hepsi boş değildir. O zaman neden sürekli null sonucunu alıyorum. Burada yanlış bir şey yapıyorum ???

pc = factory.createPeerConnection(iceServers, mediaConstraints, Peer.this); 

Düzenleme:

public CallManager(TagoveApplication context, CustomSocket server, CallType callType) { 
    this.server = server; 
    this.context = context; 
    initializeFactoryFieldTrials(); //initialize peer conn factory field trials 
    PeerConnectionFactory.initializeAndroidGlobals(context, true, true, true); 

    //PeerConnectionFactory.initializeAndroidGlobals(context, true, true, true, VideoRendererGui.getEGLContext()); 
    factory = new PeerConnectionFactory(); 

    iceServers.add(new PeerConnection.IceServer("turn:xxx.xxx.xxx.xxx:xxxx?transport=udp", "xxxxxxxx", "xxxxxxxxx")); 

    iceServers.add(new PeerConnection.IceServer("stun:stunserver.org")); 
    iceServers.add(new PeerConnection.IceServer("stun:stun.ekiga.net")); 
    iceServers.add(new PeerConnection.IceServer("stun:stun.fwdnet.net")); 
    iceServers.add(new PeerConnection.IceServer("stun:stun.ideasip.com")); 
    iceServers.add(new PeerConnection.IceServer("stun:stun.iptel.org")); 
    iceServers.add(new PeerConnection.IceServer("stun:stun.rixtelecom.se")); 
    iceServers.add(new PeerConnection.IceServer("stun:stun.schlund.de")); 

    pcConstraints.mandatory.add(new MediaConstraints.KeyValuePair("OfferToReceiveAudio", "true")); 
    pcConstraints.mandatory.add(new MediaConstraints.KeyValuePair("OfferToReceiveVideo", "true")); 
    pcConstraints.optional.add(new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true")); 

    this.callType = callType; 
} 

oluşturma Peer yapıcısı:

public Peer(
     String label, 
     PeerConnectionFactory factory, 
     LinkedList<PeerConnection.IceServer> iceServers, 
     MediaConstraints mediaConstraints, 
     PeerCallbacks peerCallbacks, 
     StreamChangeListener listener, 
     boolean incoming){ 

    this.label=label; 
    this.peerCBacks=peerCallbacks; 

    //Create Peer connection using RTCConfiguration 
    Log.d("PCTest","Peer factory value - "+String.valueOf(factory)); 
    Log.d("PCTest","ice servers size - "+iceServers.size()); 
    Log.d("PCTest","media constraints - "+String.valueOf(mediaConstraints)); 

    PeerConnection.RTCConfiguration rtcConfig = new PeerConnection.RTCConfiguration(iceServers); 
    rtcConfig.bundlePolicy = PeerConnection.BundlePolicy.MAXBUNDLE; 
    rtcConfig.rtcpMuxPolicy = PeerConnection.RtcpMuxPolicy.REQUIRE; 
    rtcConfig.keyType = PeerConnection.KeyType.ECDSA; 
    Log.d("",""); 
    this.pc = factory.createPeerConnection(rtcConfig, mediaConstraints, this); 
    Log.d("PCTest","Peer constructor called pc value - "+String.valueOf(this.pc)); 

    this.streamListener=listener; 
    log("new +"+" "+label+ " "+(peerCallbacks!=null? "notNull":"issNull")+" ++ "+incoming); 
} 
+0

Eğer' PeerConnectionFactory.initializeAndroidGlobals() aradın: o IceServerBuilder kullanarak bu şekilde yapılabilir? –

+0

Evet yaptım ve doğru olarak döndü –

+0

Ve 'Peer.this' nedir? Gözlemci tanımlandı mı? –

cevap

0

doğru fabrika başlatmak emin olun, böyle bir şey:

private void createPeerConnectionFactoryInternal(Context context) { 
    Log.d(TAG, "Create peer connection factory. Use video: " + peerConnectionParameters.videoCallEnabled); 
    // Initialize field trials. 
    String field_trials = FIELD_TRIAL_AUTOMATIC_RESIZE; 
    // Check if VP9 is used by default. 
    if (peerConnectionParameters.videoCallEnabled && peerConnectionParameters.videoCodec != null && 
      peerConnectionParameters.videoCodec.equals(MediaConfiguration.VideoCodec.VP9.toString())) { 
     field_trials += FIELD_TRIAL_VP9; 
    } 
    PeerConnectionFactory.initializeFieldTrials(field_trials); 

    if (!PeerConnectionFactory.initializeAndroidGlobals(context, true, true, 
      peerConnectionParameters.videoCodecHwAcceleration)) { 
     observer.onPeerConnectionError("Failed to initializeAndroidGlobals"); 
    } 
    factory = new PeerConnectionFactory(); 

    Log.d(TAG, "Peer connection factory created."); 
} 

DÜZENLEME: Ayrıca , Yapmak emin Peer.class Gözlemci arabirimi ile olan

DÜZENLEME 2: Belki , bu yolu denemek: factory.createPeerConnection önce, şimdi

private class PeerObserver implements PeerConnection.Observer { 

    @Override 
    public void onSignalingChange(PeerConnection.SignalingState newState) { 
     Log.d(TAG, "onSignalingChange"); 
    } 

    @Override 
    public void onIceConnectionChange(PeerConnection.IceConnectionState newState) { 
     Log.d(TAG, "onIceConnectionChange"); 
    } 

    @Override 
    public void onIceGatheringChange(PeerConnection.IceGatheringState newState) { 
     Log.d(TAG, "onIceGatheringChange"); 
    } 

    @Override 
    public void onIceCandidate(IceCandidate candidate) { 
     Log.d(TAG, "onIceCandidate"); 
    } 

    @Override 
    public void onError() { 
     Log.d(TAG, "onError"); 
    } 

    @Override 
    public void onAddStream(MediaStream stream) { 
     Log.d(TAG, "onAddStream"); 
    } 

    @Override 
    public void onRemoveStream(MediaStream stream) { 
     Log.d(TAG, "onRemoveStream"); 
    } 

    @Override 
    public void onDataChannel(DataChannel dataChannel) { 
     Log.d(TAG, "onDataChannel"); 
    } 

    @Override 
    public void onRenegotiationNeeded() { 
     Log.d(TAG, "onRenegotiationNeeded"); 
    } 

}

ve: Sınıfındaki Yeni sınıf oluşturma PeerObserver gözlemcisini ekle = new PeerObserver(); ve PeerConnection pc = factory.createPeerConnection (iceServers, mediaConstraints, observer) işlevini başlatır;

iceServers bu

ArrayList<PeerConnection.IceServer> iceServers = new ArrayList<PeerConnection.IceServer>(); 

iceServers.add (": stun.l.google.com: bayıltıcı 19302" Yeni PeerConnection.IceServer()) gibi bir şey sholud; IceServers oluştururken

+0

Yanıtladığınız için teşekkürler ... Göstermiş olduğunuz şekilde yaptığınız gibi, initializeAndroidGlobals işlevi true değerini döndürdü, hata Observer arabiriminden kaynaklandı sınıfta uygulama, ben yaptım ama hala pc null ... –

+0

Ben bağlantılı listede buz sunucuları var olabilir sorun olabilir ... –

+0

Ben öyle düşünmüyorum. Eğer LinkedList buzServer'ınız varsa = new LinkedList <>(); ArrayList – Mateusz

0

Cevap, Resmi webRTC android API içincompile 'org.webrtc:google-webrtc:1.0.+'

Doğru TlsCertPolicy kullanmalıdır olduğunu. Stun/dönüş sunucularınız güvensizse, örn .: stuns:stun1.l.google.com:19302 yerine stun:stun1.l.google.com:19302, TLS Sertifika İlkesi'ni TLS_CERT_POLICY_INSECURE_NO_CHECK olarak belirlemelisiniz. `Işlevi PeerConnection oluşturmadan önce

List<PeerConnection.IceServer> iceServers = new ArrayList<>(); 
PeerConnection.IceServer.Builder iceServerBuilder = PeerConnection.IceServer.builder("stun:stun1.l.google.com:19302"); 
iceServerBuilder.setTlsCertPolicy(PeerConnection.TlsCertPolicy.TLS_CERT_POLICY_INSECURE_NO_CHECK); //this does the magic. 
PeerConnection.IceServer iceServer = iceServerBuilder.createIceServer(); 
iceServers.add(iceServer); 
localPeer = peerConnectionFactory.createPeerConnection(iceServers, sdpConstraints,sdpObserver); 
İlgili konular