最近有一个项目的需求,是要在Android 8的电视机上做音视频通话功能,最开始尝试用portsip-uc-sdk,原来用过doubango作为手机端的SIP协议栈,在没有集成webrtc的AEC之前,啸叫特别明显,互联网上使用的时候,丢包和通话质量也是一直没有解决的一个顽疾,所以想着还是用三方的SDK,毕竟可靠性和质量有保证,无奈这个SDK免费版本只能通话三分钟,只能作罢。
PJSIP的android版本参考
https://zhuanlan.zhihu.com/p/688451265,顺利调出来视频通话的效果,对pjsip源码的熟悉,即时有什么问题,也能找到代码修改。
做项目跟做产品的不同,就是产品要大而全,而项目则要求功能稳定,一个摞一个钉。
1、去掉了Native层抛出的异常,由于Native层触发的异常,java层不能catch到;后面可以通过日志定位问题,初期这些异常是对定位分析问题是有效的,偶尔触发的异常,只要不是致命的,看日志就够了。
2、Android前后置摄像头预设不一致。
SipAccount.java中,预设的是采集走后置,但对方看到的确实前置摄像头的视频。
setVideoConfig(AccountConfig accountConfig) {
Logger.(, );
accountConfig.getVideoConfig().setAutoTransmitOutgoing();
accountConfig.getVideoConfig().setAutoShowIncoming();
accountConfig.getVideoConfig().setDefaultCaptureDevice(SipServiceConstants.);
accountConfig.getVideoConfig().setDefaultRenderDevice(SipServiceConstants.);
}
预览创建的摄像头确实FRONT_CAMERA_CAPTURE_DEVICE,也就是前置摄像头,导致前后置摄像头分别用来做显示和用来做codec发送。
handleVideoMedia(CallMediaInfo mediaInfo) {
(!= ) {
.delete();
}
(!= ) {
.delete();
}
(!) {
= VideoPreview(SipServiceConstants.);
}
= VideoWindow(mediaInfo.getVideoIncomingWindowId());
}
3、来电demo涉及好些方面,拨号盘,来电,去电呼叫等待,语音通话,视频通话等界面。
Android demo及SDK源代码:
https://gitee.com/aiprogrammer/android_pjsip_sdk_demo.git
4、Freeswitch window版本启动脚本
cd /k "cd /d C:\sip\fs_windows_64\fs_windows_64"
start cmd /k C:\sip\fs_windows_64\fs_windows_64\FreeSwitchConsole.exe
choice /t 3 /d y
感谢列表:
https://github.com/phonedotcom/pdc-voip-android-sdk
https://github.com/fengfeilong0529/PjsipGo