simple_pjsua.c | PJSIP使用说明 | 福大嵌入式实时系统课学习 | 音频通话

1. 参考

本文在本篇文章基础上,记录一些踩坑点。
PJSIP使用流程,基于 simple_pjsua.c

2. 代码

2.1 配置

修改默认配置代码
SIP服务相关可参考本人前文:
Yealink&Linux | miniSIPServer使用说明 | 福大嵌入式实时系统课学习 | 音频通话

//服务器ip
#define SIP_DOMAIN      "172.20.10.14"
//本地sip服务分机及密码
#define SIP_USER        "100"
#define SIP_PASSWD      "100"
//sip服务域名
#define SIP_REALM       "myvoipapp.com"

2.2 main

这段代码提供了按下“m”拨打电话的功能。

	/* If URL is specified, make call to the URL. */
    if (argc > 1) {
        pj_str_t uri = pj_str(argv[1]);
        status = pjsua_call_make_call(acc_id, &uri, 0, NULL, NULL, NULL);
        if (status != PJ_SUCCESS) error_exit("Error making call", status);
    }

修改for循环,增加make call功能,对配置的分机进行呼叫。

	/* Wait until user press "q" to quit. */
    for (;;) {
        char option[10];
        char uri[100];

        puts("Press 'h' to hangup all calls, 'q' to quit, 'm' to make call");
        if (fgets(option, sizeof(option), stdin) == NULL) {
            puts("EOF while reading stdin, will quit now..");
            break;
        }

        if (option[0] == 'q')
            break;

        if (option[0] == 'h')
            pjsua_call_hangup_all();

        if (option[0] == 'm') {
            puts("Enter SIP URI to call: ");
            if (fgets(uri, sizeof(uri), stdin) == NULL) {
                puts("Error reading SIP URI");
                continue;
            }
            pj_str_t pj_uri = pj_str(uri);
            status = pjsua_call_make_call(acc_id, &pj_uri, 0, NULL, NULL, NULL);
            if (status != PJ_SUCCESS)
                puts("Error making call");
        }
    }

3. 编译运行

3.1 Linux

  • 程序位于 /pjsip-apps/src/samples/simple_pjsua.c
  1. 在 /pjsip-apps/bulid 路径下输入make,执行makefile进行编译。
  2. 在 /pjsip-apps/bin/samples/x86_64-unknown-linux-gnu 路径下,输入./simple_pjsua进行运行。

3.2 Windows

在Visual Studio中的使用可参考本人前文:
Windows&Linux | PJSIP使用说明 | 福大嵌入式实时系统课学习 | 音频通话

  1. 右键samples项目,点击设为启动项目。
  2. 右键samples项目,点击生成。
  3. 右键samples项目,点击在终端中打开。
  4. 在 \pjsip-apps\bin\samples\i386-win32-vc14-debug 路径下输入.\simple_pjsua进行运行。

4. 本地项目配置

  • 本人将simple_pjsua.c移植到本地项目中,需要修改部分配置(Windows)。

4.1 解决方案

  1. 右键解决方案,添加现有项目,选择 \pjsip-apps\build 路径下的libpjproject.vcxproj进行添加。
  2. 右键本地项目,生成依赖项,项目依赖项,依赖于libpjproject。

4.2 项目属性

  1. 配置属性高级,字符集,使用多字节字符集
  2. C/C++常规,附加包含目录,根据实际包含目录路径修改

…/pjproject-2.14.1/pjsip/include
…/pjproject-2.14.1/pjlib/include
…/pjproject-2.14.1/pjlib-util/include
…/pjproject-2.14.1/pjmedia/include
…/pjproject-2.14.1/pjnath/include

  1. 链接器输入,附加依赖项,根据本地项目路径修改

Iphlpapi.lib
dsound.lib
dxguid.lib
netapi32.lib
mswsock.lib
ws2_32.lib
odbc32.lib
odbccp32.lib
ole32.lib
user32.lib
gdi32.lib
advapi32.lib
libpjproject-i386-Win32-vc14-Debug.lib
pjsua-lib-i386-Win32-vc14-Debug.lib
pjlib-i386-Win32-vc14-Debug.lib
pjlib-util-i386-Win32-vc14-Debug.lib
pjmedia-i386-Win32-vc14-Debug.lib
pjnath-i386-Win32-vc14-Debug.lib

- pjsua-lib:最高层次抽象API,该库是基于pjsip-ua及以下库做了高层次的分装。

- pjlib库:最底层、最基础的库,实现平台抽象和框架(数据结构、内存分配、文件I/O,线程同步等)

- pjlib-util库:封装常用算法,如MD5、CRC32等,以及json、xml格式解析

- pjmedia库:处理SDP协商、媒体编码和传输等

- pjnath库:处理NAT穿越问题

1

  1. 链接器常规,附加库目录,根据依赖项配置路径,这里只需要添加后六个lib文件的路径即可
  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在简单的pjsua中进行注册,您需要按照以下步骤进行操作: 1. 配置用户帐户信息:首先,您需要设置用户帐户的配置信息,包括用户名、密码、SIP服务器地址等。您可以通过修改pjsua的配置文件或者在代码中直接设置这些信息。 2. 创建SIP账户:使用pjsua库提供的函数,您可以创建一个SIP账户对象,并将其与用户帐户信息关联起来。 3. 注册SIP账户:使用pjsua库提供的函数,您可以将SIP账户注册到SIP服务器上。这将向服务器发送注册请求,并在成功注册后接收来自服务器的响应。 以下是一个简单的示例代码片段,演示了如何在pjsua中进行注册: ```c #include <pjsua-lib/pjsua.h> int main() { // 初始化pjsua库 pjsua_config cfg; pjsua_logging_config log_cfg; pjsua_acc_config acc_cfg; pjsua_create(); pjsua_config_default(&cfg); pjsua_logging_config_default(&log_cfg); // 初始化日志系统 log_cfg.console_level = 4; pjsua_init(&cfg, &log_cfg, NULL); // 启动pjsua库 pjsua_start(); // 创建SIP账户 pjsua_acc_add(&acc_cfg, PJ_TRUE, &acc_id); // 设置SIP账户配置信息 acc_cfg.id = pj_str("sip:username@domain.com"); acc_cfg.reg_uri = pj_str("sip:domain.com"); acc_cfg.cred_count = 1; acc_cfg.cred_info[0].realm = pj_str("*"); acc_cfg.cred_info[0].scheme = pj_str("digest"); acc_cfg.cred_info[0].username = pj_str("username"); acc_cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD; acc_cfg.cred_info[0].data = pj_str("password"); // 注册SIP账户 pjsua_acc_set_registration(acc_id, PJ_TRUE); // 等待注册完成 while (1) { pjsua_acc_info info; pjsua_acc_get_info(acc_id, &info); if (info.status == PJSIP_REG_STATE_REGISTERED) { break; } pjsua_sleep(100); } // 注销SIP账户 pjsua_acc_set_registration(acc_id, PJ_FALSE); // 关闭pjsua库 pjsua_destroy(); return 0; } ``` 请注意,这只是一个简单的示例代码,您可能需要根据您的具体需求进行适当的修改和调整。希望对您有所帮助!如果您有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值