1.启动一个终端:

root@yex-Ubuntu:/home/work/hiSDK/soft-app/osip_VoIP/libnice/libnice-pc/libnice-0.1.13/out-pc/bin# ./sdp-example 1 ICE-server
Generated SDP from agent :
m=text 56411 ICE/SDP
c=IN IP4 192.168.9.10
a=ice-ufrag:KOGt
a=ice-pwd:S9MVqqI/Jix+XKPFBD0EnG
a=candidate:1 1 UDP 2013266431 fe80::b4a3:70ae:118b:51da 35119 typ host
a=candidate:2 1 TCP 1019216383 fe80::b4a3:70ae:118b:51da 9 typ host tcptype active
a=candidate:3 1 TCP 1015022079 fe80::b4a3:70ae:118b:51da 47869 typ host tcptype passive
a=candidate:4 1 UDP 2013266431 fd81:c91d:29e:0:1ab5:8f5e:8454:8846 33775 typ host
a=candidate:5 1 TCP 1019216383 fd81:c91d:29e:0:1ab5:8f5e:8454:8846 9 typ host tcptype active
a=candidate:6 1 TCP 1015022079 fd81:c91d:29e:0:1ab5:8f5e:8454:8846 53419 typ host tcptype passive
a=candidate:7 1 UDP 2013266431 fd81:c91d:29e::a36 35007 typ host
a=candidate:8 1 TCP 1019216383 fd81:c91d:29e::a36 9 typ host tcptype active
a=candidate:9 1 TCP 1015022079 fd81:c91d:29e::a36 43929 typ host tcptype passive
a=candidate:10 1 UDP 2013266431 192.168.9.10 58372 typ host
a=candidate:11 1 TCP 1019216383 192.168.9.10 9 typ host tcptype active
a=candidate:12 1 TCP 1015022079 192.168.9.10 56411 typ host tcptype passive

(IPV6在某些sip 交换SDP中无法通过(freeSwitch),需在客户端去除IPV6功能,就不会在candidate中出现IPV6的节点了)
Copy the following line to remote client:

bT10ZXh0IDU2NDExIElDRS9TRFAKYz1JTiBJUDQgMTkyLjE2OC45LjEwCmE9aWNlLXVmcmFnOktPR3QKYT1pY2UtcHdkOlM5TVZxcUkvSml4K1hLUEZCRDBFbkcKYT1jYW5kaWRhdGU6MSAxIFVEUCAyMDEzMjY2NDMxIGZlODA6OmI0YTM6NzBhZToxMThiOjUxZGEgMzUxMTkgdHlwIGhvc3QKYT1jYW5kaWRhdGU6MiAxIFRDUCAxMDE5MjE2MzgzIGZlODA6OmI0YTM6NzBhZToxMThiOjUxZGEgOSB0eXAgaG9zdCB0Y3B0eXBlIGFjdGl2ZQphPWNhbmRpZGF0ZTozIDEgVENQIDEwMTUwMjIwNzkgZmU4MDo6YjRhMzo3MGFlOjExOGI6NTFkYSA0Nzg2OSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUKYT1jYW5kaWRhdGU6NCAxIFVEUCAyMDEzMjY2NDMxIGZkODE6YzkxZDoyOWU6MDoxYWI1OjhmNWU6ODQ1NDo4ODQ2IDMzNzc1IHR5cCBob3N0CmE9Y2FuZGlkYXRlOjUgMSBUQ1AgMTAxOTIxNjM4MyBmZDgxOmM5MWQ6MjllOjA6MWFiNTo4ZjVlOjg0NTQ6ODg0NiA5IHR5cCBob3N0IHRjcHR5cGUgYWN0aXZlCmE9Y2FuZGlkYXRlOjYgMSBUQ1AgMTAxNTAyMjA3OSBmZDgxOmM5MWQ6MjllOjA6MWFiNTo4ZjVlOjg0NTQ6ODg0NiA1MzQxOSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUKYT1jYW5kaWRhdGU6NyAxIFVEUCAyMDEzMjY2NDMxIGZkODE6YzkxZDoyOWU6OmEzNiAzNTAwNyB0eXAgaG9zdAphPWNhbmRpZGF0ZTo4IDEgVENQIDEwMTkyMTYzODMgZmQ4MTpjOTFkOjI5ZTo6YTM2IDkgdHlwIGhvc3QgdGNwdHlwZSBhY3RpdmUKYT1jYW5kaWRhdGU6OSAxIFRDUCAxMDE1MDIyMDc5IGZkODE6YzkxZDoyOWU6OmEzNiA0MzkyOSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUKYT1jYW5kaWRhdGU6MTAgMSBVRFAgMjAxMzI2NjQzMSAxOTIuMTY4LjkuMTAgNTgzNzIgdHlwIGhvc3QKYT1jYW5kaWRhdGU6MTEgMSBUQ1AgMTAxOTIxNjM4MyAxOTIuMTY4LjkuMTAgOSB0eXAgaG9zdCB0Y3B0eXBlIGFjdGl2ZQphPWNhbmRpZGF0ZToxMiAxIFRDUCAxMDE1MDIyMDc5IDE5Mi4xNjguOS4xMCA1NjQxMSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUK(以上的本sdp的base64字符)
Enter remote data (single line, no wrapping):
> bT10ZXh0IDYwNTQzIElDRS9TRFAKYz1JTiBJUDQgMTkyLjE2OC45LjEwCmE9aWNlLXVmcmFnOjFMdHgKYT1pY2UtcHdkOmZyaTFyMFgrRXh1RHZPcHlla0JqeEgKYT1jYW5kaWRhdGU6MSAxIFVEUCAyMDEzMjY2NDMxIGZlODA6OmI0YTM6NzBhZToxMThiOjUxZGEgNDM2MzYgdHlwIGhvc3QKYT1jYW5kaWRhdGU6MiAxIFRDUCAxMDE5MjE2MzgzIGZlODA6OmI0YTM6NzBhZToxMThiOjUxZGEgOSB0eXAgaG9zdCB0Y3B0eXBlIGFjdGl2ZQphPWNhbmRpZGF0ZTozIDEgVENQIDEwMTUwMjIwNzkgZmU4MDo6YjRhMzo3MGFlOjExOGI6NTFkYSA0Nzc2MSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUKYT1jYW5kaWRhdGU6NCAxIFVEUCAyMDEzMjY2NDMxIGZkODE6YzkxZDoyOWU6MDoxYWI1OjhmNWU6ODQ1NDo4ODQ2IDQxMjA2IHR5cCBob3N0CmE9Y2FuZGlkYXRlOjUgMSBUQ1AgMTAxOTIxNjM4MyBmZDgxOmM5MWQ6MjllOjA6MWFiNTo4ZjVlOjg0NTQ6ODg0NiA5IHR5cCBob3N0IHRjcHR5cGUgYWN0aXZlCmE9Y2FuZGlkYXRlOjYgMSBUQ1AgMTAxNTAyMjA3OSBmZDgxOmM5MWQ6MjllOjA6MWFiNTo4ZjVlOjg0NTQ6ODg0NiAzNDU1NSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUKYT1jYW5kaWRhdGU6NyAxIFVEUCAyMDEzMjY2NDMxIGZkODE6YzkxZDoyOWU6OmEzNiA1MDc3OCB0eXAgaG9zdAphPWNhbmRpZGF0ZTo4IDEgVENQIDEwMTkyMTYzODMgZmQ4MTpjOTFkOjI5ZTo6YTM2IDkgdHlwIGhvc3QgdGNwdHlwZSBhY3RpdmUKYT1jYW5kaWRhdGU6OSAxIFRDUCAxMDE1MDIyMDc5IGZkODE6YzkxZDoyOWU6OmEzNiA0ODgzMSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUKYT1jYW5kaWRhdGU6MTAgMSBVRFAgMjAxMzI2NjQzMSAxOTIuMTY4LjkuMTAgNjA3MjkgdHlwIGhvc3QKYT1jYW5kaWRhdGU6MTEgMSBUQ1AgMTAxOTIxNjM4MyAxOTIuMTY4LjkuMTAgOSB0eXAgaG9zdCB0Y3B0eXBlIGFjdGl2ZQphPWNhbmRpZGF0ZToxMiAxIFRDUCAxMDE1MDIyMDc5IDE5Mi4xNjguOS4xMCA2MDU0MyB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUK(远端的sdp base64 ,从远端复制过来的)

Send lines to remote (Ctrl-D to quit):
> hollaw(输入互相通信的数据)

2.启动另外一个终端:

root@yex-Ubuntu:/home/work/hiSDK/linux/IPC_APP_SAMPLE/libnice/Debug# ./libnice-sdp 0 ICE-server
Generated SDP from agent :
m=text 60543 ICE/SDP
c=IN IP4 192.168.9.10
a=ice-ufrag:1Ltx
a=ice-pwd:fri1r0X+ExuDvOpyekBjxH
a=candidate:1 1 UDP 2013266431 fe80::b4a3:70ae:118b:51da 43636 typ host
a=candidate:2 1 TCP 1019216383 fe80::b4a3:70ae:118b:51da 9 typ host tcptype active
a=candidate:3 1 TCP 1015022079 fe80::b4a3:70ae:118b:51da 47761 typ host tcptype passive
a=candidate:4 1 UDP 2013266431 fd81:c91d:29e:0:1ab5:8f5e:8454:8846 41206 typ host
a=candidate:5 1 TCP 1019216383 fd81:c91d:29e:0:1ab5:8f5e:8454:8846 9 typ host tcptype active
a=candidate:6 1 TCP 1015022079 fd81:c91d:29e:0:1ab5:8f5e:8454:8846 34555 typ host tcptype passive
a=candidate:7 1 UDP 2013266431 fd81:c91d:29e::a36 50778 typ host
a=candidate:8 1 TCP 1019216383 fd81:c91d:29e::a36 9 typ host tcptype active
a=candidate:9 1 TCP 1015022079 fd81:c91d:29e::a36 48831 typ host tcptype passive
a=candidate:10 1 UDP 2013266431 192.168.9.10 60729 typ host
a=candidate:11 1 TCP 1019216383 192.168.9.10 9 typ host tcptype active
a=candidate:12 1 TCP 1015022079 192.168.9.10 60543 typ host tcptype passive

Copy the following line to remote client:

bT10ZXh0IDYwNTQzIElDRS9TRFAKYz1JTiBJUDQgMTkyLjE2OC45LjEwCmE9aWNlLXVmcmFnOjFMdHgKYT1pY2UtcHdkOmZyaTFyMFgrRXh1RHZPcHlla0JqeEgKYT1jYW5kaWRhdGU6MSAxIFVEUCAyMDEzMjY2NDMxIGZlODA6OmI0YTM6NzBhZToxMThiOjUxZGEgNDM2MzYgdHlwIGhvc3QKYT1jYW5kaWRhdGU6MiAxIFRDUCAxMDE5MjE2MzgzIGZlODA6OmI0YTM6NzBhZToxMThiOjUxZGEgOSB0eXAgaG9zdCB0Y3B0eXBlIGFjdGl2ZQphPWNhbmRpZGF0ZTozIDEgVENQIDEwMTUwMjIwNzkgZmU4MDo6YjRhMzo3MGFlOjExOGI6NTFkYSA0Nzc2MSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUKYT1jYW5kaWRhdGU6NCAxIFVEUCAyMDEzMjY2NDMxIGZkODE6YzkxZDoyOWU6MDoxYWI1OjhmNWU6ODQ1NDo4ODQ2IDQxMjA2IHR5cCBob3N0CmE9Y2FuZGlkYXRlOjUgMSBUQ1AgMTAxOTIxNjM4MyBmZDgxOmM5MWQ6MjllOjA6MWFiNTo4ZjVlOjg0NTQ6ODg0NiA5IHR5cCBob3N0IHRjcHR5cGUgYWN0aXZlCmE9Y2FuZGlkYXRlOjYgMSBUQ1AgMTAxNTAyMjA3OSBmZDgxOmM5MWQ6MjllOjA6MWFiNTo4ZjVlOjg0NTQ6ODg0NiAzNDU1NSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUKYT1jYW5kaWRhdGU6NyAxIFVEUCAyMDEzMjY2NDMxIGZkODE6YzkxZDoyOWU6OmEzNiA1MDc3OCB0eXAgaG9zdAphPWNhbmRpZGF0ZTo4IDEgVENQIDEwMTkyMTYzODMgZmQ4MTpjOTFkOjI5ZTo6YTM2IDkgdHlwIGhvc3QgdGNwdHlwZSBhY3RpdmUKYT1jYW5kaWRhdGU6OSAxIFRDUCAxMDE1MDIyMDc5IGZkODE6YzkxZDoyOWU6OmEzNiA0ODgzMSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUKYT1jYW5kaWRhdGU6MTAgMSBVRFAgMjAxMzI2NjQzMSAxOTIuMTY4LjkuMTAgNjA3MjkgdHlwIGhvc3QKYT1jYW5kaWRhdGU6MTEgMSBUQ1AgMTAxOTIxNjM4MyAxOTIuMTY4LjkuMTAgOSB0eXAgaG9zdCB0Y3B0eXBlIGFjdGl2ZQphPWNhbmRpZGF0ZToxMiAxIFRDUCAxMDE1MDIyMDc5IDE5Mi4xNjguOS4xMCA2MDU0MyB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUK(以上的本sdp的base64字符)
Enter remote data (single line, no wrapping):
> bT10ZXh0IDU2NDExIElDRS9TRFAKYz1JTiBJUDQgMTkyLjE2OC45LjEwCmE9aWNlLXVmcmFnOktPR3QKYT1pY2UtcHdkOlM5TVZxcUkvSml4K1hLUEZCRDBFbkcKYT1jYW5kaWRhdGU6MSAxIFVEUCAyMDEzMjY2NDMxIGZlODA6OmI0YTM6NzBhZToxMThiOjUxZGEgMzUxMTkgdHlwIGhvc3QKYT1jYW5kaWRhdGU6MiAxIFRDUCAxMDE5MjE2MzgzIGZlODA6OmI0YTM6NzBhZToxMThiOjUxZGEgOSB0eXAgaG9zdCB0Y3B0eXBlIGFjdGl2ZQphPWNhbmRpZGF0ZTozIDEgVENQIDEwMTUwMjIwNzkgZmU4MDo6YjRhMzo3MGFlOjExOGI6NTFkYSA0Nzg2OSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUKYT1jYW5kaWRhdGU6NCAxIFVEUCAyMDEzMjY2NDMxIGZkODE6YzkxZDoyOWU6MDoxYWI1OjhmNWU6ODQ1NDo4ODQ2IDMzNzc1IHR5cCBob3N0CmE9Y2FuZGlkYXRlOjUgMSBUQ1AgMTAxOTIxNjM4MyBmZDgxOmM5MWQ6MjllOjA6MWFiNTo4ZjVlOjg0NTQ6ODg0NiA5IHR5cCBob3N0IHRjcHR5cGUgYWN0aXZlCmE9Y2FuZGlkYXRlOjYgMSBUQ1AgMTAxNTAyMjA3OSBmZDgxOmM5MWQ6MjllOjA6MWFiNTo4ZjVlOjg0NTQ6ODg0NiA1MzQxOSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUKYT1jYW5kaWRhdGU6NyAxIFVEUCAyMDEzMjY2NDMxIGZkODE6YzkxZDoyOWU6OmEzNiAzNTAwNyB0eXAgaG9zdAphPWNhbmRpZGF0ZTo4IDEgVENQIDEwMTkyMTYzODMgZmQ4MTpjOTFkOjI5ZTo6YTM2IDkgdHlwIGhvc3QgdGNwdHlwZSBhY3RpdmUKYT1jYW5kaWRhdGU6OSAxIFRDUCAxMDE1MDIyMDc5IGZkODE6YzkxZDoyOWU6OmEzNiA0MzkyOSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUKYT1jYW5kaWRhdGU6MTAgMSBVRFAgMjAxMzI2NjQzMSAxOTIuMTY4LjkuMTAgNTgzNzIgdHlwIGhvc3QKYT1jYW5kaWRhdGU6MTEgMSBUQ1AgMTAxOTIxNjM4MyAxOTIuMTY4LjkuMTAgOSB0eXAgaG9zdCB0Y3B0eXBlIGFjdGl2ZQphPWNhbmRpZGF0ZToxMiAxIFRDUCAxMDE1MDIyMDc5IDE5Mi4xNjguOS4xMCA1NjQxMSB0eXAgaG9zdCB0Y3B0eXBlIHBhc3NpdmUK(远端的sdp base64 ,从远端复制过来的)

Send lines to remote (Ctrl-D to quit):
> hollaw(输入互相通信的数据)

BASE64 在线工具https://base64.us/

3.libnice在内网中(无stun、turnserver)即使在不同的局域网下也可以通信;可以使用多线程进行多次NAT同时穿透;

多线程操作:

1)建立一个 ctx->gloop

#if GLIB_CHECK_VERSION(2, 36, 0)
    g_networking_init();
#else
    g_type_init();
#endif

ctx->gloop = g_main_loop_new(NULL, FALSE);

// Run the mainloop and the example thread
    ctx->exitThread = FALSE;
//    ctx->niceThread = g_thread_new("niceThr", &niceThr, ctx);
    g_main_loop_run (ctx->gloop);
    ctx->exitThread = TRUE;

//    g_thread_join (ctx->niceThread);
    g_main_loop_unref(ctx->gloop);

#ifdef APPSERVER_DEBUG_SUBTSK_THR
    OSA_printf("%s: Out of niceMainThr>>>>>\n", localTskId);
#endif
//    ctx->gloop = NULL;

return EXIT_SUCCESS;

2)在此基础上建立多个agent

NiceMultiThr *ctx = (NiceMultiThr *)arg;

//    gboolean *exitThread = ctx->exitThread;

gboolean relay_ok = FALSE;
    gchar *sdp;

if(ctx->gloop == NULL || (*ctx->exitThread)){
        OSA_ERROR(">>>>%s->Failed gloop exitThread: %d\n", localTskId, (*ctx->exitThread));
        return (void*)EXIT_FAILURE;
    }

ctx->exitChildThread = TRUE;
    // Create the nice agent
    ctx->agent = nice_agent_new(g_main_loop_get_context (ctx->gloop),
      NICE_COMPATIBILITY_RFC5245);
    if (ctx->agent == NULL)
        OSA_ERROR(">>>>%s->Failed to create agent.\n", localTskId);

4.最新的版本都可以用作服务端了,源码中test-turn.c有实例;

2021-03-30 libnice 应用 多线程相关推荐

  1. 2021.03.30【2021省赛】模拟 比赛总结

    2021.03.30[2021省赛]模拟 比赛总结 地址: https://gmoj.net/senior/#contest/home/3350 T1: 神奇纸牌(uno) T2: 凌乱平衡树 (tr ...

  2. JZOJ 7036. 2021.03.30【2021省赛模拟】凌乱平衡树(平衡树单旋+权值线段树)

    JZOJ 7036. 2021.03.30[2021省赛模拟]凌乱平衡树 题目大意 给出两棵Treap,大小分别为 n , m n,m n,m,每个点的 p r i o r i t y priorit ...

  3. 《惢客创业日记》2021.03.30(周二)好朋友不挡财路

    今天一上班,做视觉的李白问我:"资金找的怎么样了?"我给他说,目前还没有着落,把上次去南方见投资机构的事和这两天找人合作的事也都告诉了他.我问他新工作开始找了吗?他说还没有开始投简 ...

  4. 7035. 2021.03.30【2021省赛模拟】神奇纸牌(uno)题解

    再度死在了这种排列组合题的大刀下 一个显然的结论:一套UNO牌在复制条件下可以打完的条件当且仅当同点数同颜色的牌连边后形成连通块 这道题只有4种颜色,所以会有两种做法 1.列出DP表达式后矩阵快速幂转 ...

  5. 2021.03.17 pokémon小游戏开发记录与周总结

    2021.03.17 pokémon小游戏开发记录与周总结 此篇仅包含部分项目代码,只是个人的学习总结. 文章目录 2021.03.17 pokémon小游戏开发记录与周总结 前言 一.前期准备 二. ...

  6. 2021.03.17模块

    2021.03.17 总结 模块 什么是模块,什么是包 一个py文件就是一个模块,文件名就是模块名(如果一个模块想要被其他模块使用,模块名必须是标识符并且不是关键字) 一个包含__init__.py文 ...

  7. 题目:三个售票员 卖出 30张票 || 多线程编程的企业级套路+模板||synchronized与Lock的区别

    package com.dym.juc;//资源类 class Ticket {private int number =30;public synchronized void saleTicket() ...

  8. 精选30道Java多线程面试题

    转载自 精选30道Java多线程面试题 1.线程和进程的区别 2.实现线程有哪几种方式? 3.线程有哪几种状态?它们之间如何流转的? 4.线程中的start()和run()方法有什么区别? 5.怎么终 ...

  9. Go、Rust、C++和Zig语言的生产力对比 | Gopher Daily (2021.03.28) ʕ◔ϖ◔ʔ

    每日一谚:Goroutines and channels are big ideas. They're tools for program construction. Go技术生态 掉入Go nil坑 ...

  10. 2021.03青少年软件编程(Python)等级考试试卷(二级)

    2021.03青少年软件编程(Python)等级考试试卷(二级) 一.单选题(共25题,共50分) 1.对于字典infor = {"name":"tom", & ...

最新文章

  1. graphpad两组t检验_Graphpad 作图教程 | 手把手教你绘制森林图
  2. “手机编码速度大 PK”,你玩程序猿撸月饼了么?
  3. 在最长的距离二叉树结点
  4. AutoCAD 2013
  5. flask 项目基本框架的搭建
  6. 易语言mysql表新增防止重复_sqlite数据库 大量插入数据时如何避免重复插入(易语言,做好用sql语句写下)...
  7. centos修改磁盘uuid_如何修改linux磁盘的uuid
  8. PyTorch安装问题解决
  9. 清晨一杯水,到底怎么喝才算健康?
  10. 平滑线反锯齿工具_Photoshop中的华丽渐变工具的使用
  11. java中多线程重要吗_Java基础知识_多线程必要知识点
  12. .Net魔法堂:开启IIS的WebGarden、WebFarm和StateServer之旅
  13. 生产调度系统算法模型简要设计
  14. 简单两个矩阵如何用计算机运算,矩阵运算-如何用卡西欧fx-82es计算器计算矩阵和 – 手机爱问...
  15. c语言json数据解析,C语言库函数解析JSON文件
  16. N2N组建虚拟局域网——筑梦之路
  17. 工作笔记(python给excel加密)
  18. Initialization of variable was never used; consider replacing with assignment to ‘_’ or removing it
  19. filer.js: 一个 Unix 命令风格的 HTML 5 FileSystem API 封装 - V2EX
  20. Glyphs 3 for Mac字体设计编辑工具

热门文章

  1. 甲骨文裁员真的与川普有关吗?
  2. 迅雷下载电影天堂片源,出现“应版权方要求,文件无法下载”的解决方法
  3. ubuntu20.04显卡驱动3分钟安装方法
  4. 小米手机无限重启,两清与三清
  5. 风险模型—VaR模型1
  6. ubuntu 强制删除文件夹
  7. 【房价预测】BP神经网络回归的现实应用-上海市二手房价格影响因素分析——思路剖析和结果分享
  8. python小明爬楼梯_Python3爬楼梯算法示例
  9. word行首空格下划线_word空格处加下划线 word空格处下划线
  10. N76E003红外解码程序