Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.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
Javascript 是否可以使用webRTC跨浏览器?_Javascript_Webrtc - Fatal编程技术网

Javascript 是否可以使用webRTC跨浏览器?

Javascript 是否可以使用webRTC跨浏览器?,javascript,webrtc,Javascript,Webrtc,我正在使用webRTC,并使用带有websockets的SIP自我实现进行对等连接 当我测试流时,我能够流式传输并在每个对等点上看到远程和本地流。此测试位于同一浏览器上,每个对等浏览器具有不同的选项卡。测试在Firefox和Chrome中成功完成 当我在Firefox中测试一个对等点,在Chrome中测试另一个对等点,或者反之亦然,那么我看不到本地流,但我可以使用remote 控制台中不显示任何异常或错误。 在哪些情况下,当在不同浏览器中使用一个对等点和另一个对等点,但在同一浏览器中执行所有操作

我正在使用webRTC,并使用带有websockets的SIP自我实现进行对等连接

当我测试流时,我能够流式传输并在每个对等点上看到远程和本地流。此测试位于同一浏览器上,每个对等浏览器具有不同的选项卡。测试在Firefox和Chrome中成功完成

当我在Firefox中测试一个对等点,在Chrome中测试另一个对等点,或者反之亦然,那么我看不到本地流,但我可以使用remote

控制台中不显示任何异常或错误。 在哪些情况下,当在不同浏览器中使用一个对等点和另一个对等点,但在同一浏览器中执行所有操作时,流会失败


我能做些什么来调试它呢?

我敢打赌,当您在实现中将其作为SIP over websocket进行尝试时,浏览器之间存在SDP兼容性问题。您必须尝试开源lib,比如SIPjs、JSsip、SIPml5,它们已经在通过websocket进行SIP了

控制台中不显示任何异常或错误

在访问webRTC API时,确保已将日志记录添加到所有可能的故障案例
catch(err)


JSsip的在线演示在Chrome和Firefox中都可用,但有些API是不同的。 您需要编写一个适配器或使用现有的WebRTC适配器库来实现两者之间的兼容性

例如,一个简单的适配器如下所示:

var MediaStream =  $window.webkitMediaStream || $window.MediaStream;
var PeerConnection = $window.mozRTCPeerConnection || $window.webkitRTCPeerConnection || $window.RTCPeerConnection;
var IceCandidate = $window.mozRTCIceCandidate || $window.webkitRTCIceCandidate || $window.RTCIceCandidate;
var SessionDescription = $window.mozRTCSessionDescription || $window.webkitRTCSessionDescription || $window.RTCSessionDescription;
我强烈建议您使用类似的适配器库,这样您就不必手动处理所有边缘情况


希望这能有所帮助。

从使用adapter.js开始-现在WebRTC实际上必须使用这个工具()。还有,为什么不使用SIP.js呢?怎么了?你是在只有一个摄像头的机器上测试的吗?当Firefox正在使用网络摄像头时,Chrome无法访问它。最简单的选项是连接另一个网络摄像头,或者通过创建新的首选项media.navigator.streams.fake将Firefox更改为使用假的设备,具体设置为true,时间大约为:config@PhilippHancke谢谢你提供的信息,你帮了我很多。@PhilippHancke我不同意你的观点。你在Chrome和Firefox中试过apprtc one吗?这两种浏览器都有了很大的发展。chrome和firefox都可以共享一个网络摄像头。但媒体API可能不同。您做错了什么,我们需要查看您的代码以提供帮助。我的webscoket服务器只将SDP(在每个浏览器上生成)从一个对等服务器传递到另一个对等服务器。它只传递此信息,不进行修改。然后,这两个SDP都被传递到peerconnection实例的构造函数中,即使使用catch也没有错误。@DidacHerrera在FireFox和Chrome的纯音频模式下尝试查看音频工作调试。我发现当被调用方(因此另一个浏览器上的调用方已经激活了流并在视频元素上显示)时即将获取本地媒体,对象已创建,但属性active=false。这就是为什么对等连接创建成功而没有错误,但我看不到被调用方流。。。此属性为只读,因此无法强制使用。可能是谁?为什么当一个流在一个对等方中处于活动状态时,另一个对等方会创建一个非活动的mediastream对象?其他信息是,我正在ubuntu virtualbox和windows主机中对其进行测试请注意,
msrtpeerConnection
msRTCSessionDescription
不是一件事。从来没有。我也怀疑
webkirtcsessiondescription
是否存在。感谢@jib指出这一点,我的自定义适配器已经很旧了。我正在使用来自的WebRTC适配器。@jib我正在使用adapter.js来实现这一点。我的javascript,同样的脚本,在Firefox和Chrome上运行良好,无需修改。当一个对等方在chrome中,另一个对等方在Firefox中时,问题就出现了,尽管接收到了远程流,但它并没有显示出来。onaddstream在远程流到来时被触发,但当分配给它时,它不会显示在html视频元素上。我试图调试,但没有显示错误。我使用的是适配器,当两个对等方都在同一个浏览器中时,这种方法很有效,但当另一个对等方(调用者或被调用者)与另一个对等方在不同的浏览器中时,这种方法就不起作用了。@DidacHerrera,很难在没有看到代码的情况下进行评论。接听电话时,时间和操作顺序往往很重要,例如,始终立即在报价中设置
setRemoteDescription
,并在接听前确保口香糖。Firefox和Chrome之间的基本WebRTC通常运行良好。例如,当我在Chrome和Firefox之间剪切“n”paste offer and answer时,wfm。@jibI发现,当被调用方(因此另一浏览器上的调用方已经激活了流并显示在视频元素上)即将获得本地媒体时,对象被创建,但属性active=false。这就是为什么对等连接创建成功而没有错误,但我看不到被调用方流。。。此属性为只读,因此无法强制使用。可能是谁?为什么当一个流在一个对等方中处于活动状态时,另一个对等方会创建一个非活动的mediastream对象?