Im building an android app that should be able to communicate audio with another client built on libjingle.
The first thing im trying to do is setup a call between "the other" client and my android app. We use XMPP as a signaling service.
So after this :
peerConnectiobObj.setRemoteDescription(sdp)
I get the successcallback (so I guess the remote description is fine?) And then according to what I think I have figured out its time for me to create my answer.
@Override public void onCreateSuccess(SessionDescription sessionDescription) { peerConnectiobObj.createAnswer(theSDPobserver, MediaConstraints); }
BUT I end up in the error callback :(
@Override public void onSetFailure(String s) { }
Where s tells me
Failed to set local answer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to setup SRTP filter..
Im feeling lost I dont even know what that means. If anyone could point me in the right direction I would be a happier developer.
Actually I general im feeling a bit lost when it comes to this.. :)
EDIT:
This is what my local SDP looks like when I get to OnSetFailure(string s)
v=0 o=- 8493684831531207397 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE audio a=msid-semantic: WMS m=audio 1 RTP/SAVPF 0 c=IN IP4 0.0.0.0 a=rtcp:1 IN IP4 0.0.0.0 a=ice-ufrag:kOkIsQjMk2B0a9U4 a=ice-pwd:tofHiOCYA8vxc6RhGijvAJhD a=mid:audio a=recvonly a=rtcp-mux a=crypto:0 AES_CM_128_HMAC_SHA1_80 inline:CuhhoTjgAvZWACKU0enZ6JkBOOtm1XcILVU1kgha a=rtpmap:0 PCMU/8000
EDIT: I updated my libjingle.jar and .so, recompiled with the current trunk. Not it can successfully createAnswer()
But when I do
setLocalDescription()
I get the public void onSetFailure(String s) CB
This is my local SDP when I get to that state :
v=0 o=- 5609339699751423572 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE audio a=msid-semantic: WMS fAy0FNrYIDVfeRwX5X0IK5TOCVTNJOXt4Cdb m=audio 1 RTP/SAVPF 0 c=IN IP4 0.0.0.0 a=rtcp:1 IN IP4 0.0.0.0 a=ice-ufrag:HvkTUFYLQHFQYV1a a=ice-pwd:OtBToOqg56IROXkI1zpljupo a=mid:audio a=sendrecv a=rtcp-mux a=crypto:0 AES_CM_128_HMAC_SHA1_80 inline:hMJUMLPuM1zYuIaUCEjr46aMsMwfc+MHjBM6PDES a=rtpmap:0 PCMU/8000 a=ssrc:4099416672 cname:DO5g7daVh6dqHm/E a=ssrc:4099416672 msid:fAy0FNrYIDVfeRwX5X0IK5TOCVTNJOXt4Cdb fAy0FNrYIDVfeRwX5X0IK5TOCVTNJOXt4Cdb00 a=ssrc:4099416672 mslabel:fAy0FNrYIDVfeRwX5X0IK5TOCVTNJOXt4Cdb a=ssrc:4099416672 label:fAy0FNrYIDVfeRwX5X0IK5TOCVTNJOXt4Cdb00
Does anyone know whats wrong with it ? :(
Your sdp is incomplete. It should have several ice candidates which would be used for establishing connection. You should add ice candidates into your peerConnection object in such manner:
@Override public void onIceCandidate(IceCandidate iceCandidate) { peerConnection.addIceCandidate(iceCandidate); }
and send your sdp to another client after when PeerConnection.IceGatheringState become COMPLETE in onIceGatheringChange method. This is not the only way, but it's working and very simple. The example of complete sdp is below:
offer=v=0 o=- 8080295062834070855 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE audio video a=msid-semantic: WMS ARDAMS m=audio 13491 RTP/SAVPF 111 103 9 102 0 8 106 105 13 127 126 c=IN IP4 54.77.231.253 a=rtcp:18373 IN IP4 54.77.231.253 a=candidate:1858001140 1 udp 2122260223 10.215.226.16 40647 typ host generation 0 a=candidate:1858001140 2 udp 2122260222 10.215.226.16 51975 typ host generation 0 a=candidate:540877828 1 tcp 1518280447 10.215.226.16 54789 typ host tcptype passive generation 0 a=candidate:540877828 2 tcp 1518280446 10.215.226.16 60723 typ host tcptype passive generation 0 a=candidate:4025933376 1 udp 1686052607 217.118.93.137 49688 typ srflx raddr 10.215.226.16 rport 40647 generation 0 a=candidate:4025933376 2 udp 1686052606 217.118.93.137 49689 typ srflx raddr 10.215.226.16 rport 51975 generation 0 a=candidate:4025933376 2 udp 1686052606 217.118.93.137 53707 typ srflx raddr 10.215.226.16 rport 51975 generation 0 a=candidate:4025933376 1 udp 1686052607 217.118.93.137 53709 typ srflx raddr 10.215.226.16 rport 40647 generation 0 a=candidate:1718996300 1 udp 41885439 54.77.231.253 13491 typ relay raddr 217.118.93.137 rport 53710 generation 0 a=candidate:1718996300 2 udp 41885438 54.77.231.253 18373 typ relay raddr 217.118.93.137 rport 53711 generation 0 a=ice-ufrag:vveSvzaR39lenaX1 a=ice-pwd:g7ouF2sZNGOh5Y7O42HaV+a2 a=fingerprint:sha-256 7D:E2:C3:49:0E:33:81:E8:1A:24:44:A2:FB:D9:E0:D9:BA:2A:40:B0:9E:BA:B1:BE:ED:EF:22:E0:F6:54:39:F3 a=setup:actpass a=mid:audio a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=sendrecv a=rtcp-mux a=rtpmap:111 opus/48000/2 a=fmtp:111 minptime=10; useinbandfec=1 a=rtpmap:103 ISAC/16000 a=rtpmap:9 G722/8000 a=rtpmap:102 ILBC/8000 a=rtpmap:0 PCMU/8000 a=rtpmap:8 PCMA/8000 a=rtpmap:106 CN/32000 a=rtpmap:105 CN/16000 a=rtpmap:13 CN/8000 a=rtpmap:127 red/8000 a=rtpmap:126 telephone-event/8000 a=maxptime:60 a=ssrc:3583862867 cname:ily01dbTSMDARdSy a=ssrc:3583862867 msid:ARDAMS ARDAMSa0 a=ssrc:3583862867 mslabel:ARDAMS a=ssrc:3583862867 label:ARDAMSa0 m=video 16750 RTP/SAVPF 100 116 117 96 c=IN IP4 54.77.231.253 a=rtcp:10591 IN IP4 54.77.231.253 a=candidate:1858001140 1 udp 2122260223 10.215.226.16 36169 typ host generation 0 a=candidate:1858001140 2 udp 2122260222 10.215.226.16 55549 typ host generation 0 a=candidate:540877828 1 tcp 1518280447 10.215.226.16 33189 typ host tcptype passive generation 0 a=candidate:540877828 2 tcp 1518280446 10.215.226.16 40769 typ host tcptype passive generation 0 a=candidate:4025933376 1 udp 1686052607 217.118.93.137 49687 typ srflx raddr 10.215.226.16 rport 36169 generation 0 a=candidate:4025933376 2 udp 1686052606 217.118.93.137 49690 typ srflx raddr 10.215.226.16 rport 55549 generation 0 a=candidate:4025933376 1 udp 1686052607 217.118.93.137 53714 typ srflx raddr 10.215.226.16 rport 36169 generation 0 a=candidate:4025933376 2 udp 1686052606 217.118.93.137 53708 typ srflx raddr 10.215.226.16 rport 55549 generation 0 a=candidate:1718996300 1 udp 41885439 54.77.231.253 16750 typ relay raddr 217.118.93.137 rport 53713 generation 0 a=candidate:1718996300 2 udp 41885438 54.77.231.253 10591 typ relay raddr 217.118.93.137 rport 53712 generation 0 a=ice-ufrag:vveSvzaR39lenaX1 a=ice-pwd:g7ouF2sZNGOh5Y7O42HaV+a2 a=fingerprint:sha-256 7D:E2:C3:49:0E:33:81:E8:1A:24:44:A2:FB:D9:E0:D9:BA:2A:40:B0:9E:BA:B1:BE:ED:EF:22:E0:F6:54:39:F3 a=setup:actpass a=mid:video a=extmap:2 urn:ietf:params:rtp-hdrext:toffset a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time a=extmap:4 urn:3gpp:video-orientation a=sendrecv a=rtcp-mux a=rtpmap:100 VP8/90000 a=rtcp-fb:100 ccm fir a=rtcp-fb:100 nack a=rtcp-fb:100 nack pli a=rtcp-fb:100 goog-remb a=rtpmap:116 red/90000 a=rtpmap:117 ulpfec/90000 a=rtpmap:96 rtx/90000 a=fmtp:96 apt=100 a=ssrc-group:FID 382374264 1436972716 a=ssrc:382374264 cname:ily01dbTSMDARdSy a=ssrc:382374264 msid:ARDAMS ARDAMSv0 a=ssrc:382374264 mslabel:ARDAMS a=ssrc:382374264 label:ARDAMSv0 a=ssrc:1436972716 cname:ily01dbTSMDARdSy a=ssrc:1436972716 msid:ARDAMS ARDAMSv0 a=ssrc:1436972716 mslabel:ARDAMS a=ssrc:1436972716 label:ARDAMSv0
Hope this helps!
Try changing the constraints while creating the peerConnection to
MediaConstraints pcConstraints = new MediaConstraints();
pcConstraints.optional.add(new KeyValuePair("DtlsSrtpKeyAgreement", "true")); pcConstraints.optional.add(new KeyValuePair("RtpDataChannels", "true")); peerConnectionFactory.createPeerConnection(config, pcConstraints, new PcObserver());