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做成熟一点了。
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就是站住了这个先机,所以后面可以做很多其他的事情来赚钱。