问题描述
我已使用lt-cred-mech
选项设置了coTURN服务器(使用TURN REST API)。我生成的用户如下:
- 用户:
1601871288:4e4d54c1-7b69-40a2-b355-ff2b40e003c4
- 通过:
doSnY8s16/vK6ynnALMkbl0DcLo=
我已经通过trickle-ice进行了测试,并且我的浏览器可以连接到我的服务器:
从coTURN服务器登录:
240848: session 001000000000000929: realm <> user <>: incoming packet BINDING processed,success
240849: session 001000000000000928: realm <> user <>: incoming packet BINDING processed,success
240851: IPv4. Local relay addr: 172.30.0.9:49063
240851: session 000000000000000589: new,realm=<>,username=<1601871288:4e4d54c1-7b69-40a2-b355-ff2b40e003c4>,lifetime=3600
240851: session 000000000000000589: realm <> user <1601871288:4e4d54c1-7b69-40a2-b355-ff2b40e003c4>: incoming packet ALLOCATE processed,success
240851: IPv4. Local relay addr: 172.30.0.9:49021
240851: session 000000000000000590: new,lifetime=3600
240851: session 000000000000000590: realm <> user <1601871288:4e4d54c1-7b69-40a2-b355-ff2b40e003c4>: incoming packet ALLOCATE processed,success
240851: session 000000000000000589: refreshed,lifetime=0
240851: session 000000000000000589: realm <> user <1601871288:4e4d54c1-7b69-40a2-b355-ff2b40e003c4>: incoming packet REFRESH processed,success
240851: session 000000000000000589: TCP socket closed remotely x.x.x.x:44301
240851: session 000000000000000589: usage: realm=<>,rp=3,rb=324,sp=3,sb=312
240851: session 000000000000000589: peer usage: realm=<>,rp=0,rb=0,sp=0,sb=0
240851: session 000000000000000589: closed (2nd stage),user <1601871288:4e4d54c1-7b69-40a2-b355-ff2b40e003c4> realm <> origin <>,local 172.30.0.9:3478,remote x.x.x.x:44301,reason: TCP connection closed by client (callback)
240851: session 000000000000000589: delete: realm=<>,username=<1601871288:4e4d54c1-7b69-40a2-b355-ff2b40e003c4>
但是当我使用Android应用拨打电话时,应用无法连接。
我的android代码:
PeerConnection.IceServer iceServer = PeerConnection.IceServer
.builder("turn:x.x.x.x:3478")
.setUsername("1601871288:4e4d54c1-7b69-40a2-b355-ff2b40e003c4")
.setPassword("doSnY8s16/vK6ynnALMkbl0DcLo=")
.setTlsCertPolicy(PeerConnection.TlsCertPolicy.TLS_CERT_POLICY_INSECURE_NO_CHECK)
.createIceServer();
iceServers.add(iceServer);
PeerConnection.RTCConfiguration rtcConfig = new PeerConnection.RTCConfiguration(iceServers);
// TCP candidates are only useful when connecting to a server that supports
// ICE-TCP.
rtcConfig.tcpCandidatePolicy = PeerConnection.TcpCandidatePolicy.disABLED;
rtcConfig.bundlePolicy = PeerConnection.BundlePolicy.MAXBUNDLE;
rtcConfig.rtcpMuxPolicy = PeerConnection.RtcpMuxPolicy.REQUIRE;
rtcConfig.continualGatheringPolicy = PeerConnection.ContinualGatheringPolicy.GATHER_CONTINUALLY;
rtcConfig.iceTransportsType = PeerConnection.IceTransportsType.ALL;
// Use ECDSA encryption.
rtcConfig.keyType = PeerConnection.KeyType.ECDSA;
// disable when use loopback
rtcConfig.enableDtlsSrtp = true;
rtcConfig.sdpSemantics = PeerConnection.SdpSemantics.UNIFIED_PLAN;
peerConnection = factory.createPeerConnection(rtcConfig,pcObserver);
但是我从服务器error 401: Unauthorized
从服务器登录:
241236: session 001000000000000943: realm <> user <>: incoming packet message processed,error 401: Unauthorized
241236: session 001000000000000944: realm <> user <>: incoming packet message processed,error 401: Unauthorized
241236: session 001000000000000943: realm <> user <>: incoming packet message processed,error 401: Unauthorized
241236: session 000000000000000591: realm <> user <>: incoming packet message processed,error 401: Unauthorized
有人可以告诉我我的错误在哪里吗?
谢谢。
解决方法
也许它将帮助您找到一些线索,基本上发生的是您的STUN / TURN服务器未对iceCandidates进行身份验证。 取自RFC docs:
case $age in
*[!0-9]*) echo "Age must not contain non-numeric digits";;
esac