logo头像

勤求古训,博采众方

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>

构建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
    13
    val 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
    }
    }

两台设备视频通话效果

参考文档

Android build_instructions
Mac平台下编译PJSIP Android端 实现VoIP通话