WebRTC Native框架(五),HR的话扎心了

本文详细介绍了WebRTC Native框架的组成部分,包括media、modules、pc、sdk目录的功能。重点讲解了P2P连接的实现,包括STUN、TURN服务器的作用以及ICE框架。此外,还探讨了信令服务器在端到端连接中的角色,以及WebRTC在不同平台上的SDK适配。文章以WebRTC官方示例应用为例,展示了客户端和服务器端的逻辑,并提供了编译指南,帮助读者理解WebRTC的P2P通信和信令过程。
摘要由CSDN通过智能技术生成

media:是对video和audio增强和编解码的封装层,即video engine和audio engine。

modules:音视频具体功能实现所在的目录,如音视频编解码实现;音频混音、处理以及设备管理,视频采集播放以及数据发送和占用带宽估计等;

pc(peer connection)目录:P2P连接实现的核心目录;

sdk目录:android平台应用层Java和MAC平台应用层Object C访问natvie层的桥接层;

server端

STUN服务器:用于获取设备的外网地址;

TURN服务器:在P2P通信失败后用于中继;

ICE框架,整合了TURN和STUN。

信令服务器:负责端到端的连接,如SDP,candidate等;

因为由于IPv4地址数量不够用和安全的问题,开会的双方基本都在防火墙和NAT之后,通过运营商接入公网,当在家时手机、电脑、网络电视通过电信路由器上网时,路由器分配给我们的地址就是“192.168.XXX.XXX”,但是在公网上我们的数据头地址被转换成电信服务商提供的地址了,如果双发希望直接通信而不需要公共服务器中转(加大了延迟和丢包的不确定性)数据包,这时需要NAT穿透技术,STUN和TURN就是这种透传协议,ICE是一套整合了这两个协议的框架。

client端

Android IOS Windows MAC Linux 浏览器。

由于不同平台使用了不同的UI库和编程语言,他们的实现差异很大,但是不同的平台都会支持c/c++,所以为了适配不同的平台,WebRTC提供了SDK层,Linux平台基于使用GTK的c++,MAC和IOS平台基于使用cocoa库的Object c,android平台基于JAVA,为了让这些平台都能够调用c/c++核心函数,WebRTC提供了android和object c的封装层,这称为SDK层,android中使用了JNI机制使得UI层的JAVA程序和实现核心功能的c/c++程序可以互相调用,类似的object c使用了.mm扩展程序是得UI的.m程序可以和c/c++互相调用。由于访问各个平台都提供了C API(为了效率),所有已在音视频以及网络API都可以直接通过包含不同操作系统的头文件来实现跨平台差异化编译。

WebRTC官方工程里包括了一些应用程序例子,它们位于src/examples目录下,首先看下各个目录的作用。

peerconnection:windows和linux平台下使用Native API进行P2P通信的例子,其中客户端应用程序在client目录,服务器端应用程序在server目录下。客户端具有简单的音视频功能,服务器端使得客户端程序能够通过信令开启会议。整个会议过程需要服务器先启动服务,如./peerconnection_server --port=8888,正确启动后会有如下输出:

Server listening on port 8888

然后启动客户端,客户端UI包括如下部分,connecting to a server:在客户端程序启动时,需要指定服务器IP地址,然后可以点击connect按钮;其中localhost表示本机地址。

select a peer:当不同的client端连接到server时,他们就会互相发现对方如下所示(这是因为两个client是在同一个电脑不同终端启动的,所以两边看到的都是gsc@240),这是可以直接双击或者选中后回车建立P2P连接;

视频会议:当成功建立端到端的链接后,桌面会以全屏的形式显示视频界面,如下;

Ending chat session:当按Esc键时会推回到P2P列表选择界面;

Ending connection:继续按Esc将回到server连接界面;

工程编译

export PKG_CONFIG_PATH=$WEBRTCBUILDS_FOLDER/lib/Release/pkgconfig

Go to the peerconnection server folder

g++ -o peerconnection_server main.cc data_socket.cc peer_channel.cc utils.cc \

( p k g − c o n f i g − − c f l a g s − − l i b s − − d e f i n e − v a r i a b l e = p r e f i x = (pkg-config --cflags --libs --define-variable=prefix= (pkgconfigcflags

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值