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 

 

 

 

 

 

 

 

 

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