Mac平台下编译PjSip Android端实现P2P电话
本文于 459 天之前发表,文中内容可能已经过时。
如何编译PjSip源码,运行Android的demo,p2p相互呼叫
配置说明
- macOS
- 13.4.1
- PJSIP版本
- 2.14
- ndk版本
- 21.3.6528147
构建准备
- 1.获取源码,选择2.14的包下载
- 2.配置config_site.h文件
- pjlib/include/pj/config_site.h文件
1
2
3
4
5
6
7
8/* Activate Android specific settings in the 'config_site_sample.h' */
/* 走Android配置 */
#define PJ_CONFIG_ANDROID 1
/* 开启视频 */
#define PJMEDIA_HAS_VIDEO 1
/* 解决挂断走断言崩溃问题 */
#define NDEBUG 1
#include <pj/config_site_sample.h>
- pjlib/include/pj/config_site.h文件
构建PJSIP
- 进入PJSIP源码工程,配置ndk环境,执行android端脚本
1
2
3
4$ cd /path/to/your/pjsip/dir
$ export ANDROID_NDK_ROOT=/path_to_android_ndk_dir
$ ./configure-android
$ make dep && make clean && make
构建Android的demo
- 最新的版本已经有两个demo,一个是用kotlin写的,另外一个是java写的,两个都可以用
- 进入PJSIP源码工程,执行下面命令,会产生一些文件:
- 1.libpjsua2.so在pjsip-apps/src/swig/java/android/app/src/main/jniLibs/armeabi目录下
- pjsua2 Java接口(很多.java文件)位于 pjsip-apps/src/swig/java/android/app/src/main/java/org/pjsip/pjsua2
1
2
3$ cd /path/to/your/pjsip/dir
$ cd pjsip-apps/src/swig
$ make
- 在Android Studio中打开 pjsua2 应用程序项目,它位于 pjsip-apps/src/swig/java/android
配置demo参数
1.设置p2p呼叫地址,可以与linphone进行相互呼叫,需要把linphone网络的随机端口关闭,默认是走5060端口
1
2//配置呼叫方的ip地址
const val CALL_DST_URI = "sip:192.168.30.126:5060"2.注释空设备方法,不然通话的时候没有声音
1
g.ep.audDevManager().setNullDev()
- 3.切换扬声器/听筒的方法
1
2
3
4
5
6
7
8
9
10
11
12
13val buttonSwitch = findViewById<Button>(R.id.button_switch)
buttonSwitch.setOnClickListener {
val speakerState = audioManager.isSpeakerphoneOn
if (!speakerState) {
//打开扬声器
Toast.makeText(this, "打开扬声器", Toast.LENGTH_SHORT).show()
audioManager.isSpeakerphoneOn = true
} else {
//关闭扬声器
Toast.makeText(this, "关闭扬声器", Toast.LENGTH_SHORT).show()
audioManager.isSpeakerphoneOn = false
}
}