• metaRTC5.0编程之p2p网络穿透(stun)指南


    概述

    音视频通信时为了节省服务器带宽,通信效率最好的就是p2p,但是在现实的应用场景中,我们的客户端都是在大局域网内部的,stun协议就是要解决如何穿透这些局域网实现p2p。

    metaRTC5.0最新版本支持stun,使p2p在互联网上利用网络穿透技术实现通信。

    下载源码

    https://github.com/metartc/metaRTC/releases/tag/5.0.022icon-default.png?t=M5H6https://github.com/metartc/metaRTC/releases/tag/5.0.022https://gitee.com/metartc/metaRTC/releases/5.0.022icon-default.png?t=M5H6https://gitee.com/metartc/metaRTC/releases/5.0.022

     metaRTC5.0编程

    metaRTC5.0 p2p stun编程有两种模式:

    1. websockt+stun
    2. http+frpc(ngrok)+stun

    配置参数

    代码配置参数

    1. strcpy(m_context->avinfo.rtc.iceServerIP,"182.92.163.143"); //stun服务器地址
    2. m_context->avinfo.rtc.iceStunPort=3478; //stun服务器端口
    3. m_context->avinfo.rtc.hasIceServer=1; //1:启用stun 0:关闭stun

    或者在配置文件yang_config.ini中配置

    1. [rtc]
    2. hasIceServer=1
    3. usingDatachannel=1
    4. iceStunPort=3478
    5. iceServerIP=182.92.163.143
    6. audioQueueCount=5
    7. vidoeQueueCount=5

    模式一(websockt+stun)

    代码在libmetartc5/src/yangp2p/YangP2pRtcIce.cpp中

    1. //发起连接到对端
    2. int32_t YangP2pRtcIce::connectPeer(int32_t nettype, string server,int32_t localPort,int32_t pport,string app,string stream) {
    3. int32_t ret = 0;
    4. YangPeerConnection* sh=(YangPeerConnection*)calloc(sizeof(YangPeerConnection),1);
    5. ....配置参数.....
    6. //初始化YangPeerConnection
    7. yang_create_peerConnection(sh);
    8. sh->init(&sh->peer);
    9. char* localSdp; //本端sdp
    10. char* remoteSdp=(char*)calloc(12*1000,1); //对端sdp
    11. //向stun服务器发送stun request取得外网地址和端口
    12. if(m_context->avinfo.rtc.hasIceServer){
    13. if(sh->requestStunServer(&sh->peer)!=Yang_Ok) yang_error("request stun server fail!");
    14. }
    15. //取得本端sdp
    16. sh->createOffer(&sh->peer, &localSdp);
    17. 将sdp通过信令服务传输到对端
    18. //取得对端sdp后,启动metartc
    19. ret=sh->setRemoteDescription(&sh->peer,remoteSdp);
    20. }
    1. //取得对端sdp后, 调用sh->createAnswer(&sh->peer,answer);
    2. //取得answer后,通过信令服务传会对端
    3. int32_t YangP2pRtcIce::addPeer(char* remotesdp,char* answer,char* remoteIp,int32_t localPort,int* phasplay) {
    4. 配置参数...
    5. //初始化YangPeerConnection
    6. yang_create_peerConnection(sh);
    7. sh->init(&sh->peer);
    8. //向stun服务器发送stun request取得外网地址和端口
    9. if(m_context->avinfo.rtc.hasIceServer){
    10. if(sh->requestStunServer(&sh->peer)!=Yang_Ok) yang_error("request stun server fail!");
    11. }
    12. //取得answer Sdp
    13. ret = sh->createAnswer(&sh->peer,answer);
    14. ....取得answer后,通过信令服务传会对端
    15. //取得对端sdp后,启动metartc
    16. ret = sh->setRemoteDescription(&sh->peer,remotesdp);
    17. .....
    18. }

    模式二(http+frpc(ngrok)+stun)

    在原来metap2p5的demo代码中修改,修改文件libmetartc5/src/yangp2p/YangP2pRtc.cpp

    通过frpc(ngrok)等映射http,用浏览器或者客户端直接访问外网映射地址即可,操作模式和原来模式不变。

  • 相关阅读:
    兼顾友好与安全,隐私协议 Unijoin 助推新一轮 Web3 浪潮
    【21天python打卡】第15天 python经典案例(1)
    2022/8/12
    字符串左旋 与 字符串旋转结果
    【Java面试】RDB 和 AOF 的实现原理、优缺点
    web项目相关问题
    数据库基础(一)
    遥感检测与分割论文阅读
    Android---touch 事件分发
    前端面试一面 汇量科技
  • 原文地址:https://blog.csdn.net/m0_56595685/article/details/125467076