0

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

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

所以在这之后:

peerConnectiobObj.setRemoteDescription(sdp)

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

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

但我最终在错误回调:(

@Override
public void onSetFailure(String s)
{

}

哪里告诉我

Failed to set local answer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to setup SRTP filter..

我感到迷茫,我什至不知道那是什么意思。如果有人能指出我正确的方向,我会成为一个更快乐的开发者。

实际上,当涉及到这一点时,我一般感觉有点失落.. :)

编辑:

这就是我到达 OnSetFailure(string 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,用当前的主干重新编译。不是它可以成功createAnswer()

但是当我这样做时

setLocalDescription()

我得到 public void 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

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

4

2 回答 2

0

您的 sdp 不完整。它应该有几个用于建立连接的候选冰。您应该以这种方式将候选冰添加到您的 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

希望这可以帮助!

于 2015-07-14T15:39:38.970 回答
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());

于 2015-07-22T05:30:33.790 回答