热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

本文主要介绍关于webrtc,p2p,stun的知识点,对【metaRTC5.0编程之p2p网络穿透(stun)指南】和【p2pwebrtc】有兴趣的朋友可以看下由【metaRTC】投稿的技术文章,

本文主要介绍关于webrtc,p2p,stun的知识点,对【metaRTC5.0编程之p2p网络穿透(stun)指南】和【p2p webrtc】有兴趣的朋友可以看下由【metaRTC】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的metaRTC相关技术问题。

p2p webrtc

概述

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

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

下载源码

https://github.com/metartc/metaRTC/releases/tag/5.0.022

https://github.com/metartc/metaRTC/releases/tag/5.0.022 https://gitee.com/metartc/metaRTC/releases/5.0.022

https://gitee.com/metartc/metaRTC/releases/5.0.022

 metaRTC5.0编程

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

websockt+stunhttp+frpc(ngrok)+stun 配置参数

代码配置参数

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

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

[rtc]
hasIceServer=1
usingDatachannel=1
iceStunPort=3478
iceServerIP=182.92.163.143
audioQueueCount=5
vidoeQueueCount=5

模式一(websockt+stun)

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

//发起连接到对端
int32_t YangP2pRtcIce::connectPeer(int32_t nettype, string server,int32_t localPort,int32_t pport,string app,string stream) {
	int32_t ret = 0;
	YangPeerConnection* sh=(YangPeerConnection*)calloc(sizeof(YangPeerConnection),1);
    ....配置参数.....
    //初始化YangPeerConnection
	yang_create_peerConnection(sh);
    sh->init(&sh->peer);

	char* localSdp; //本端sdp
	char* remoteSdp=(char*)calloc(12*1000,1); //对端sdp
	//向stun服务器发送stun request取得外网地址和端口
	if(m_context->avinfo.rtc.hasIceServer){
		if(sh->requestStunServer(&sh->peer)!=Yang_Ok) yang_error("request stun server fail!");
	}
    //取得本端sdp
	sh->createOffer(&sh->peer, &localSdp);
	
    将sdp通过信令服务传输到对端
	

	//取得对端sdp后,启动metartc
	ret=sh->setRemoteDescription(&sh->peer,remoteSdp);
}
//取得对端sdp后, 调用sh->createAnswer(&sh->peer,answer);
//取得answer后,通过信令服务传会对端
int32_t YangP2pRtcIce::addPeer(char* remotesdp,char* answer,char* remoteIp,int32_t localPort,int* phasplay) {
   配置参数...
   //初始化YangPeerConnection
	yang_create_peerConnection(sh);
    sh->init(&sh->peer);

	//向stun服务器发送stun request取得外网地址和端口
	if(m_context->avinfo.rtc.hasIceServer){
		if(sh->requestStunServer(&sh->peer)!=Yang_Ok) yang_error("request stun server fail!");
	}
   //取得answer Sdp
	ret = sh->createAnswer(&sh->peer,answer);
    ....取得answer后,通过信令服务传会对端

	//取得对端sdp后,启动metartc
	ret = sh->setRemoteDescription(&sh->peer,remotesdp);

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

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

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

本文《metaRTC5.0编程之p2p网络穿透(stun)指南》版权归metaRTC所有,引用metaRTC5.0编程之p2p网络穿透(stun)指南需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • SOA架构理解理解SOA架构,了解ESB概念,明白SOA与微服务的区别和联系,了解SOA与热门技术的结合与应用。1、面向服务的架构SOASOA(ServiceOrien ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • Question该提问来源于开源项目:react-native-device-info/react-native-device-info ... [详细]
  • java线程池的实现原理源码分析
    这篇文章主要介绍“java线程池的实现原理源码分析”,在日常操作中,相信很多人在java线程池的实现原理源码分析问题上存在疑惑,小编查阅了各式资 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 第七课主要内容:多进程多线程FIFO,LIFO,优先队列线程局部变量进程与线程的选择线程池异步IO概念及twisted案例股票数据抓取 ... [详细]
  • 1.为什么会有树?因为当有大量的输入数据时,链表的线性访问时间就显得略长了。而树结构,其大部分操作的运行时间平均为O(logN)。2.树 ... [详细]
  • RingBuffer,或者说CircularBuffer,是一个长度固定的缓冲区,当从一端插入元素超过指定的最大长度时,缓冲区另一端的元素 ... [详细]
  • 51nod3221祝寿(反向建图优化)
    题目链接感觉忘记了好多东西。求有向图中其余点到一个点的最短距离可以将该图翻转后rundijkstra#include#include ... [详细]
  • 一、死锁现象与递归锁进程也是有死锁的所谓死锁:是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作 ... [详细]
author-avatar
万源佳威5
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有