时间如梭,就要到给丈母娘送月饼的时间了。
记录一下上半年主要折腾的东东,使用传统的VoIP方案提供手机实时音视频聊天通讯SDK。
服务器做混流转发,相比网状模型,减少了手机客户端带宽和性能方面的压力,服务器混完后的媒体流还可以分发到RTMP CDN,这样其它观众可以通过CDN拉流。
前后端都是用开源的项目,挺想参与到自研的视频会议系统的研发中,但是xxx,基本是我和另外一个同事在整。
服务端
OpenSIPS 1.11.x 负载均衡 + FreeSWITCH 1.6.x
阅读官方wiki和自带的sammple配置文件,官方wiki并没有及时更新,有些不清楚的通过搜索下源码基本能猜出来。
OpenSIPS dispatcher分发注册,load_balancer分发呼叫,可以参考Tutorials-LoadBalancing
一开始面对 opensips.cfg route 脚本挺懵逼的,通过调试看xlog打印日志慢慢知道了个大概,也通过dialog解决了呼叫同一个会议号码能够保证分发到同一个FS服务器节点。
除了官方wiki外,下面的资料十分好:
- 杜金房老师的《FreeSWITCH权威指南》,非常受用,详读了2遍。FS mod_av 模块也是杜老师贡献的,我大概看了下,对于LibAV的使用mod_av还有可以优化的地方。
- 余洪涌老师的《百问FreeSwitch》
- 老黑老师的《使用OpenSER构建电话通信系统》
- RFC文档 3261 2327 等都有中文翻译版本
客户端
基于 iOS idoubs 和 Android imsdroid 基础上修改和优化。
Doubango 这个框架官方基本不维护了,Github 上面也挂了很多issue没有解决,所以慢慢填这些坑。
框架实现的很好,用ANSI C写出了面向对象套路,模块化,很值得学习。
把GPUImage拿过来,加了美颜效果,增加更多的分辨率输出,iOS OC层是用MRC的,有个引用计数crash查了n久,有些问题idoubs已经解决了并没有同步到imsdroid中等等。
卡顿花屏挺严重,修改了重传和码率自适应代码,还是会有花屏卡顿现象,待优化。
计划
- 继续优化Doubango客户端
- 尝试其它开源客户端linphone,pjsip等
- 尝试WebRTC使用sip信令跟FreeSWITCH搭配
- 尝试WebRTC + licode
- 体验其它公司实时通讯SDK
- 传统CDN厂家已经开始在研发WebRTC服务器