LibJingle在CreateAnswer上的Android SRTP错误

时间:2014-09-24 17:16:48

标签: android webrtc libjingle

我正在构建一个Android应用程序,它应该能够与构建在libjingle上的另一个客户端进行音频通信。

我想要做的第一件事是在“另一个”客户端和我的Android应用程序之间设置一个调用。我们使用XMPP作为信令服务。

所以在此之后:

peerConnectiobObj.setRemoteDescription(sdp)

我得到successcallback(所以我猜远程描述没问题?) 然后根据我的想法,我已经知道了我创建答案的时间。

@Override
public void onCreateSuccess(SessionDescription sessionDescription)
{
    peerConnectiobObj.createAnswer(theSDPobserver, MediaConstraints);
}

但我最终在错误回调中:(

@Override
public void onSetFailure(String s)
{

}

s告诉我

Failed to set local answer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to setup SRTP filter..
我感到迷茫,我甚至都不知道这意味着什么。如果有人能指出我正确的方向,我会是一个更快乐的开发者。

实际上我总体感觉有点迷失... ...)

编辑:

当我到达OnSetFailure(字符串s)

时,这就是我的本地SDP
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

编辑: 我更新了我的libjingle.jar和.so,用当前的trunk重新编译。 不是它可以成功createAnswer()

但是当我做的时候

setLocalDescription()

我得到了公共的无效onSetFailure(String s)CB

当我到达那个州时,这是我当地的SDP:

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

有谁知道它有什么问题吗? :(

2 个答案:

答案 0 :(得分:0)

你的sdp不完整。它应该有几个冰候选者,用于建立连接。您应该以这种方式将ice候选添加到peerConnection对象中:

@Override
public void onIceCandidate(IceCandidate iceCandidate) {
    peerConnection.addIceCandidate(iceCandidate);
}

并在onIceGatheringChange方法中PeerConnection.IceGatheringState变为COMPLETE之后将sdp发送到另一个客户端。这不是唯一的方法,但它的工作非常简单。完整sdp的例子如下:

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

希望这有帮助!

答案 1 :(得分:0)

尝试在创建peerConnection时更改约束

MediaConstraints pcConstraints = new MediaConstraints();

pcConstraints.optional.add(new KeyValuePair(“DtlsSrtpKeyAgreement”,“true”));     pcConstraints.optional.add(new KeyValuePair(“RtpDataChannels”,“true”)); peerConnectionFactory.createPeerConnection(config,pcConstraints,new PcObserver());