Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chrome/Android叮当声SDP ICE连接故障_Android_Google Chrome_Webrtc_Sdp_Libjingle - Fatal编程技术网

Chrome/Android叮当声SDP ICE连接故障

Chrome/Android叮当声SDP ICE连接故障,android,google-chrome,webrtc,sdp,libjingle,Android,Google Chrome,Webrtc,Sdp,Libjingle,我正在为Android设备开发一个应用程序,允许对连接到XMPP服务器的其他支持WebRTC的设备进行语音/视频呼叫。我已经成功地将该应用程序用于Android设备之间的语音/视频聊天,现在我正在努力将该功能扩展到支持WebRTC的浏览器。我已经成功地实现了浏览器到浏览器的语音/视频通话,但是该系统是基于SDP协议的,而我构建的Android应用程序是基于叮当协议的。我知道我可以重写Android应用程序来使用SDP协议,就像以前那样。然而,我想继续在Android设备上使用叮当协议,因为我构建

我正在为Android设备开发一个应用程序,允许对连接到XMPP服务器的其他支持WebRTC的设备进行语音/视频呼叫。我已经成功地将该应用程序用于Android设备之间的语音/视频聊天,现在我正在努力将该功能扩展到支持WebRTC的浏览器。我已经成功地实现了浏览器到浏览器的语音/视频通话,但是该系统是基于SDP协议的,而我构建的Android应用程序是基于叮当协议的。我知道我可以重写Android应用程序来使用SDP协议,就像以前那样。然而,我想继续在Android设备上使用叮当协议,因为我构建的应用程序开发了许多功能,这些功能严重依赖于LibKingle中基于叮当的代码

基于已经完成的SDP/Kingle翻译器(具体来说),我目前有一个浏览器客户端和一个Android设备,成功地协商语音/视频通话的媒体方面。然而,当一方试图连接另一方时,事情似乎失败了。我的一部分人认为,失败在于冰/叮当的翻译。我注意到,通过“onicecandidate”传递到浏览器的ice候选者不包含任何用户名和密码信息。我曾尝试将浏览器客户端生成的原始SDP报价中的用户名和密码信息复制到每个合适的ice候选人(语音与视频)中,但没有取得任何成功。我也尝试过在传输节中不包含任何用户名和密码信息,但这也没有产生任何效果

在整个通信过程中,我在浏览器端运行wireshark,并且我继续看到浏览器和Android设备之间的绑定错误,直到Android设备最终发送“会话终止”信号。具体而言,我看到以下情况:

STUN 158绑定请求用户:r8bGP7y5LklOOKEb:IjgBbKgXQe9V8Pur

过时凭据用户:r8bGP7y5LklOOKEb:IjgBbKgXQe9V8PurSTUN 130绑定错误响应错误代码:274(未知错误代码)

最终,错误响应停止显示,然后开始显示如下消息:

ICMP 186目标不可访问(端口不可访问)

我对ICE/运输部分的谈判还很陌生,因此我不确定wireshark日志是否相关,或者我是否正确诊断了问题

有人知道我可能做错了什么吗?或者,有没有在基于SDP的客户机和基于叮当声的客户机之间建立连接的经验

澄清我在ICE翻译中所做的工作

SDP候选人:

<candidate component="[comp]" name="[name]" address="[ip]" port="[port]" 
protocol="[proto]" username="[uname]" password="[pass]" preference="[pref]" 
generation="[gen]"/>
a=候选者:[基础][组件id][传输类型][优先级][连接地址][端口][候选者类型][用户名][密码][生成]

丁格尔候选人:

<candidate component="[comp]" name="[name]" address="[ip]" port="[port]" 
protocol="[proto]" username="[uname]" password="[pass]" preference="[pref]" 
generation="[gen]"/>
从SDP到叮当,我使用以下映射:

foundation = randomly generated number
component-id = comp
transport type = udp
priority = pref * 10000
connection address = ip
port = port
candidate type = typ host
username = uname
password = pass
sdpMLineIndex = 0 if audio, 1 if video
sdpMid = audio / video 
comp = component-id
name = event.candidate.sdpMid (with the adjustment of rtp and rtcp based on 
       component value)
ip = connection address
port = port
proto = transport type
uname = varies from being empty to being the respective one generated in the
        original SDP media information
pass = varies from being empty to being the respective one generated in the
       original SDP media information
pref = 0.99
gen = 0
我在Chrome中获得的ICE候选人的一个例子:

a=candidate:3376904655 2 udp 2113937151 192.168.1.144 46794 typ host generation 0
a=candidate:1208975227 1 udp 1845501695 xxx.xxx.xxx.xxx 46794 typ srflx raddr 192.168.1.144 rport 46794 generation 0
我从Kingle获得的ICE候选人的一个例子:

<candidate name="video_rtp" address="xxx.xxx.xxx.xxx" port="37275" preference="0.99" username="4XqIQDW4n9lJrIOM" protocol="udp" generation="0" password="F0Vc9tWo4S2/VhleJ/BdNOId" type="local" network="wlan0"/>
<candidate name="video_rtp" address="xxx.xxx.xxx.xxx" port="54429" preference="0.86" username="0ftgSUZ0qRFXlMh5" protocol="udp" generation="0" password="lIyHJZuZt8L/wIZnnqfQfRED" type="stun" network="wlan0"/>

因此,事实证明,LibKingle还没有配备SDP/ICE转换。明确地因此,唯一的办法是将该系统重做为基于SDP的系统

因此,事实证明,LibJingle还没有配备SDP/ICE转换。明确地因此,唯一的办法是将该系统重做为基于SDP的系统