51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Android版本的pjsip使用过程记录

最近有一个项目的需求,是要在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





赞(0)
未经允许不得转载:工具盒子 » Android版本的pjsip使用过程记录