pjsip windows demo编译运行 (pjsip 2.9 qt环境)

1、编译参考 https://www.cnblogs.com/GYY2046/p/11455747.html

编译完成后在pjsip2.9/lib下产生一个libpjproject-i386-Win32-vc14-Debug.lib 就是所有的lib 

2、创建qt gui 程序 在 lib 和include 导入lib 和头文件

ffmpeg和sdk的都在incude目录

pjsip的需要导入的参考

3、将这些考入include下

4、最后vs项目配置lib 和include

 也可以参考vidgui写 也可参考pjsip-apps\src\samples 下的pjsua2_demo.cpp 或者simple_pjsua.c

5、创建一个qt thread 导入lib


#include <pjsua2.hpp>

#include <sdl/SDL.h>

#pragma comment(lib, "avcodec.lib")
#pragma comment(lib, "avdevice.lib")
#pragma comment(lib, "avfilter.lib")
#pragma comment(lib, "avformat.lib")
#pragma comment(lib, "avutil.lib")
#pragma comment(lib, "postproc.lib")
#pragma comment(lib, "swresample.lib")
#pragma comment(lib, "swscale.lib")

#pragma comment(lib, "libpjproject-i386-Win32-vc14-Debug.lib")
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "wsock32.lib")
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "dsound.lib")  
#undef main
 
using namespace pj;

这个是c++的

c的去掉using namespace pj;和#include <pjsua2.hpp>改成pjsip.h

线程不能停掉

 void run(){

pjsua_acc_id acc_id;
    pj_status_t status;

    /* Create pjsua first! */
    status = pjsua_create();
    if (status != PJ_SUCCESS) error_exit("Error in pjsua_create()", status);

    /* If argument is specified, it's got to be a valid SIP URL */
    if (argc > 1) {
    status = pjsua_verify_url(argv[1]);
    if (status != PJ_SUCCESS) error_exit("Invalid URL in argv", status);
    }

    /* Init pjsua */
    {
    pjsua_config cfg;
    pjsua_logging_config log_cfg;

    pjsua_config_default(&cfg);
    cfg.cb.on_incoming_call = &on_incoming_call;
    cfg.cb.on_call_media_state = &on_call_media_state;
    cfg.cb.on_call_state = &on_call_state;

    pjsua_logging_config_default(&log_cfg);
    log_cfg.console_level = 4;

    status = pjsua_init(&cfg, &log_cfg, NULL);
    if (status != PJ_SUCCESS) error_exit("Error in pjsua_init()", status);
    }

    /* Add UDP transport. */
    {
    pjsua_transport_config cfg;

    pjsua_transport_config_default(&cfg);
    cfg.port = 5060;
    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &cfg, NULL);
    if (status != PJ_SUCCESS) error_exit("Error creating transport", status);
    }

    /* Initialization is done, now start pjsua */
    status = pjsua_start();
    if (status != PJ_SUCCESS) error_exit("Error starting pjsua", status);

    /* Register to SIP server by creating SIP account. */
    {
    pjsua_acc_config cfg;

    pjsua_acc_config_default(&cfg);
    cfg.id = pj_str("sip:" SIP_USER "@" SIP_DOMAIN);
    cfg.reg_uri = pj_str("sip:" SIP_DOMAIN);
    cfg.cred_count = 1;
    cfg.cred_info[0].realm = pj_str(SIP_DOMAIN);
    cfg.cred_info[0].scheme = pj_str("digest");
    cfg.cred_info[0].username = pj_str(SIP_USER);
    cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
    cfg.cred_info[0].data = pj_str(SIP_PASSWD);

    status = pjsua_acc_add(&cfg, PJ_TRUE, &acc_id);
    if (status != PJ_SUCCESS) error_exit("Error adding account", status);
    }

    /* 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);
    }

while (!exit)
{ sleep(1);//1s
        

}

on_error:
    pjsua_destroy();

}

7、

如果你觉得麻烦可以去 https://item.taobao.com/item.htm?id=618486196283

sip服务器搭建可参考:https://blog.csdn.net/Java_lilin/article/details/103063930

pjsip java 参考:https://blog.csdn.net/Java_lilin/article/details/103511795

pjsip  c# 参考 https://blog.csdn.net/Java_lilin/article/details/106229860

更多写法可以参考安卓pjsua2代码:https://blog.csdn.net/Java_lilin/article/details/89212406

 

测试交流群261074724 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章