1、注册流程:
涉及函数见下表。调用顺序自上而下。
函数名 | 所在文件 | 功能 |
---|---|---|
addAccount | PjSipService.java | |
acc_add | pjsua.java | |
Java_org_pjsip_pjsua_pjsuaJNI_acc_1add | pjsua_wrap.cpp | |
pjsua_acc_add | pjsua_acc.c | |
pjsua_acc_set_registration | pjsua_acc.c | |
pjsip_regc_register | sip_reg.c | 构造sip注册消息 |
pjsip_regc_send | sip_reg.c | 发送sip注册消息 |
pjsip_endpt_send_request | sip_util_statefull.c | 发送sip注册消息 |
2、回调函数映射流程:
pjsip 是通过调用 C 层 pjsua_config 结构体中的 cb 成员来实现回调。下表以 cb 中的 on_call_state 回调函数为例说明映射流程。调用顺序自下而上。
函数名 | 所在文件 | 所属类或结构体 |
---|---|---|
cb.on_call_state | pjsua.h | pjsua_config |
on_call_state_wrapper | pjsua_wrap.cpp | wrapper_callback_struct |
on_call_state | pjsua_wrap.cpp | SwigDirector_Callback |
on_call_state | UAStateReceiver.java | UAStateReceiver |
将 cb 指向 wrapper_callback_struct 是在 Java_org_pjsip_pjsua_pjsuaJNI_pjsua_1config_1cb_1set 中完成的,具体执行代码为:
if (arg1) (arg1)->cb = *arg2;
JNI 映射 java 方法是在 Java_org_pjsip_pjsua_pjsuaJNI_swig_1module_1init 中完成的,具体执行代码为:
Swig::director_methids[i] = jenv->GetStaticMethodID(jcls, methods[i].method, methods[i].signature);
3、声音采集和播放
功能 | 实现函数 | 所在文件 | 调用函数 |
---|---|---|---|
注册 | pjmedia_aud_register_factory | pjsua_jni_addons.c | csipsimple_init |
初始化 | android_create_stream | android_jni_dev.cpp | |
声音采集 | AndroidRecorderCallback | android_jni_dev.cpp | strm_start |
声音播放 | AndroidTrackCallback | android_jni_dev.cpp | strm_start |