最近有一个项目的需求,是要在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
-------------------广告线---------------
项目、合作,欢迎勾搭,邮箱:promall@qq.com
本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com