我必须在android应用程序中实现WebRTC,因为我使用的是libjingle库,版本为11139.在这里我总是得到pc(PeerConnection class instance)总是空的.我检查过的值
factory(PeerConnectionFactory)
iceServers(LinkedList<IceServers>
mediaConstraints
Peer.this(PCObserver interface))
Run Code Online (Sandbox Code Playgroud)
但他们都不是空的.那么为什么我总是得到结果null.我在这里做错了吗???
pc = factory.createPeerConnection(iceServers, mediaConstraints, Peer.this);
Run Code Online (Sandbox Code Playgroud)
编辑:
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;
}
Run Code Online (Sandbox Code Playgroud)
创建Peer构造函数:
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);
}
Run Code Online (Sandbox Code Playgroud)
答案是官方 webRTC android API compile 'org.webrtc:google-webrtc:1.0.+'
TlsCertPolicy在创建 IceServers 时,您应该使用正确的, 。如果您的 stun/turn 服务器不安全,例如:stun:stun1.l.google.com:19302您 stuns:stun1.l.google.com:19302应该将 TLS 证书策略设置为TLS_CERT_POLICY_INSECURE_NO_CHECK。可以使用 IceServerBuilder 以这种方式完成:
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);
Run Code Online (Sandbox Code Playgroud)
确保正确初始化工厂,如下所示:
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.");
}
Run Code Online (Sandbox Code Playgroud)
编辑:另外,请确保您的 Peer.class 已实现 Observer 接口
编辑2:也许,尝试这种方式:在你的班级中创建新班级:
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");
}
Run Code Online (Sandbox Code Playgroud)
}
现在,在factory.createPeerConnection之前添加PeerObserverobserver = new PeerObserver(); 并初始化 PeerConnection pc =factory.createPeerConnection(iceServers, mediaConstraints,observer);
冰服务器应该看起来像这样
ArrayList<PeerConnection.IceServer> iceServers = new ArrayList<PeerConnection.IceServer>();
Run Code Online (Sandbox Code Playgroud)
iceServers.add(new PeerConnection.IceServer("stun:stun.l.google.com:19302"));
| 归档时间: |
|
| 查看次数: |
2428 次 |
| 最近记录: |