现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

对微信android4.2的一些研究

2013-08-19 22:30 工业·编程 ⁄ 共 3149字 ⁄ 字号 暂无评论

下面是研究微信android 4.2版本的一些结果,不一定正确。

1. 微信android使用的是amr编码;iphone未知,估计是aac,转码会在微信服务器上完成。android上使用了speex这个库,估计是为了达到边录边发。在服务器做格式转换确实比客户端方便多了,用ffmpeg就可以搞定了,也是瘦客户端的一种思路,而且可以依此延伸很多扩展业务。

2. 微信android最新版的数据库依然是sqlite,但文件做了加密,用的是http://sqlcipher.net/

3. 微信发送地理位置用的是google地图,网页地址在assets\map\map_cn.html

4. 微信的视频通信不是在QQ的基础上做的,而是自己实现的一套,基于speex,webrtc, voip等库。微信和QQ的视频通信和skype相差太远了,特别是网络好的情况下。看来视频通信还是有技术壁垒的,现在只能希望Google将webrtc做成熟一点了。

5. 微信使用了一些jni:
    libImgProcess.so 用于gif处理,特别是抠背景。这个微信在一个讲座里面还专门提过。
    libvprotocal.so 用于视频录制,不过这个库效率也不高。录制一分钟的视频,等待压缩要半分钟。干嘛不像Instagram放在后头偷偷去做,或者边做边录。
    libMMProtocalJni.so  用于pcm转amr,不用android系统自带的是因为可以边录边发,这个库也做了插件相关的一些处理
    libvoipMain.so 视频通话
    libvoice.so 视频通话语音处理,用了speex
    libSync.so 用于通讯录同步
    libImgFilter.so 用于图片处理的滤镜
    libmmcrypto.so 数据库加密,其实就是sqlcipher

6.  我原先以为微信会在QQ的基础上做视频通话,但实际上它没有,可能是因为这样可以比较独立,不用遵循QQ的协议。不过QQ的协议为了兼容,有了很重的历史包袱,已不太适合新潮流了。微信的视频通话用了两个服务器:punch.weixin.qq.com和voip.weixin.qq.com。这两个服务器主要是为了打洞和握手。

7. 从http://timyang.net/architecture/notes-weixin/和腾讯大讲堂的一些资料,谈的比较多的是类Sync协议。从张小龙做邮箱的背景来看,我原本以为会是这样一种协议:每个消息相当于一条邮件,而微信的各个界面相当于邮箱的各个文件夹,例如收件箱,发件箱,垃圾邮件,自定义文件夹等,客户端和服务器端要做的就是做这些文件夹同步,就像rsync一样。但从后面的了解来看,实际上并没有这样做。我觉得用邮件来理解IM系统是最直观的方式,发一条消息相当于发一封邮件,邮件体系里面已经很好地做到了转发,分布式,邮件组,邮件状态等功能,客户端要做的就是同步邮件和联系人等。

8. 从微信的发展来看,微信后面应该是朝着平台方向发展,也就是它提供推送和消息发送平台,让其他厂商依此开发应用,发布信息,做活动等。现实中的一句话:要致富,先修路。互联网的路就是互通,就是交流。QQ就是站住了这个先机,所以后面可以做很多其他的事情来赚钱。

9. 从现在互联网的发展而言,IM和视频(包括IM里面视频通话)是一个方向,这些都应该成为互联网的基础设施,就像浏览器一样。现在IM还没有一个很好的解决方案,XMPP并不能很好地做到业务逻辑独立开来。从IM的本质来看,IM其实就是将一条消息从一个地方传输到另外一个地方,这个和TCP很像,为什么不实现一个高级点的TCP协议了,只是将TCP/IP里面的IP地址换成了一个类似XMPP的唯一ID而已,其他的很多细节都可以照搬TCP协议。有了这个协议之后,将业务逻辑在现有HTTP server的基础上做,例如发送语音和图片就相当于上传一个文件,服务器在处理完这个文件后就发一条特殊的IM消息。客户端收到这个IM消息后,按照IM消息里面url去HTTP server取语音文件和图片文件。将HTTP server和IM server打通之后,可以做很多事情。但将这个两个server合并在一块并不是一个好事,不然腾讯也不会有2005年的战略转型了。从现在的情况来看,应用除了游戏,都没怎么赚钱,现在能够承载赚钱业务的还是以web为主。IM不可以赚钱,但没有却是不行的,就像一个地方要致富,不修路是不行的道理一样。

10. 前面说到了现在承载赚钱业务的以web为主,原因是为什么呢? 是因为数据。马云曾经说过:21世纪核心的竞争是数据的竞争,谁拥有更多数据,谁就拥有未来。数据对于互联网公司就相当于现实中金钱。对于web而已,在客户这么没保留什么数据,基本将所要的用户信息全部汇集到了服务器。对于一个公司而言,发布一个软件,如果软件装在客户端之后就不再贡献数据了(例如单机应用),那么这个公司的寿命基本就等同于这个软件火的时期,之后公司想转型都很难,因为没数据你能做什么?因此,没数据的公司是短命的,这也是现在很多应用和游戏活不长的原因。腾讯为什么这么强大,就是因为它收集了几亿人的数据。因此,现在的软件应该千方百计地收集用户数据到服务器端,这也是微信采用瘦客户端的一个原因。数据在客户端越少,在服务器端就越多。对于浏览器而已,本地的数据都是缓存,删除掉也无关系。

11. 瘦客户端从技术上讲是为了便于开发和维护,因为客户端一般是几个星期更新一次,而在这期间运营可能有很多新活动要推广,所以很多东西必须可以在服务器端定制;从商业上讲就是为了将用户的数据采集到服务器上。用户手上有1万块钱,与你何干,只有让用户将这一万块钱存到你这个银行里(相当于用户将数据放在服务器上),你才能用这一万块钱干其他事,赚更多的钱。用户的数据就像土地一样,是生产资料,种庄稼可以挣钱,挖矿和开工厂也可以赚钱,关键是你怎么组织,管理,运营这些数据了。移动终端相当于数据采集器,也相当于现实社会中的收税员,银行业务员, ATM机。

12. 对于瘦客户端,微信的做法是应该客户端定义了几种布局(例如文字布局,图片布局,语音布局,图文混排布局),然后数据通过插件和服务器端转换成布局需要的数据,从而进行显示。 这个很像ajax编程, 页面里面定义了一些大的元素,然后从服务器拿数据来填充这些元素。从用户体验来说,完全用HTML在效率和动画等方面都无法让人满意,而HTML的模型确实是一个好模型。所以这需要折中,让客户端尽量少地做事,最好只需要拿到数据后照葫芦画瓢显示一下就可以了,客户端则定义一些布局,例如listview,gridview,和里面子节点的布局,然后将这些的流畅度,操作体验都做好,而不管数据的具体细节。瘦客户端一个好理解的例子是UC web,它将HTML做了简化,自己定义了一些操作,例如画点,划线,画图片,画button等,而它不管这些操作的位置计算等,因为这些都是服务器完成的。想象一下远程桌面的实现,这个就更容易理解了。

13. 到现在未知,没有几款IM会在服务器上存储聊天记录,例如gtalk会将聊天记录保存在gmail中。以前很多文章里面提到了QQ与ICQ不同的地方是因为腾讯第一个将用户的好友存储在服务器,所以存储用户的聊天消息在服务器我觉得应该是后面IM的一个趋势。别说这个从技术上无法做到,我每天收的邮件大小比IM消息的大小大多了,邮箱都可以存,为什么IM不能存。虽然会增大运营成本,但IM消息也是数据,也是可以从中赚钱的,就像google可以在gmail里面放广告一样。微信说它会支持消息的备份和还原,还不如直接在服务器上保存聊天记录算了。

作者:徐凡

给我留言

留言无头像?