最近又再次用chrome测试webrtc的demo(https://appr.tc/)。 为了有更多的控制性,和测试两个客户端不同的网络环境的情况是否可以通讯。此网站是google提供的测试网站并且提供了网站的全部源代码(https://github.com/webrtc/apprtc)。可以自行部署在自己的机器上。部署webrtc的服务器,如果想访问摄像头的功能必须部署https。或者你只能通过localhost来访问。apprtc提供的代码是需要部署 Google App Engine SDK for Python的。或者使用使用这个docker(piasy/webrtc-build),使用说明。不过存在一个问题,就是它们都不支持https的访问,如果用chrome来调试,就只能本机访问。或者你在做一个https和wss的转发代理。
上述的方法我并没有采用,我是用golang重写了一次这个demo的python部分。代码请去https://github.com/daozhao/apprtc-go。为什么重写这个,当然有原因,这里就不说了。
先说说我的发现的bug。我发现在windows的chrome经常建立不了呼叫和应答,出不了视频图像。有时候可以有时候不可以。搞不懂。使用的官方的appr.tc的网站测试和自己搭建的测试环境都一样。但是我在mac OS X上的chrome肯定是可以的。实在搞不懂。
测试了很久,终于发现规律了。就是我如果是通过Mac OS X 上的Microsoft Remote Desktop去登陆windows进行操作,进行测试是没有任何问题的。但是如果我是直接在windows的主机上操作就是老出不到图像。或者,先remote过windows,chrome进行过呼叫,并出过图像,然后再在windows主机操作,这样也是可以的。这个真的令我奇怪不已。
不过找其他同事的windows机器测试并没有此问题。真的傻了,chrome升级了一遍又一遍,卸载重装。问题依旧。后来细心思考了一会儿,估计出问题是截屏问题,因为我的windows是台式机,并没有摄像头。呼叫或者应答的时候是输出桌面的截屏视频的。后来我在主机接上了一个usb摄像头。并在chrome的设置使用该摄像头。发觉问题解决了。这个问题搞了我2天。真的TMD。
在这个bug解决后,我继续思考。chrome的桌面输出是需要在启动的时候添加参数才可以。我由第一次使用chrome测试webrtc就没有打开过这个参数,就可以输出桌面的。我开始并不以为然。以为网上的资料有错,由或者我之前打开了chrome的测试模式。现在看来这个桌面输出并不是chrome自带的。而且我安装了一个第三方的截屏输出的驱动。而chrome把它也当作一个摄像头。我查询了一下这个截屏输出是screen-capture-recorder。原来这个东西和chrome有点不合。不过我在别的同事也安装了这个插件的机器上,并没有我的问题。看来是版本的原因。