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就是站住了這個先機,所以後面可以做很多其他的事情來賺錢。
幫人推廣一下: 地推Wifi熱點