当前位置:   article > 正文

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

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"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

修改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");
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

1

  1. 链接器常规,附加库目录,根据依赖项配置路径,这里只需要添加后六个lib文件的路径即可
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/751679
推荐阅读
相关标签
  

闽ICP备14008679号