Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

libice是一个c/c++库,它实现了RFC5245规范定义的交互式连接建立(ICE)协议, 适用于实时通信领域,比如音视频实时通信。

License

NotificationsYou must be signed in to change notification settings

str2num/libice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

libice是一个c/c++类库,它实现了RFC5245规范定义的交互式连接建立协议, 该协议将交互式连接建立(ICE)定义为一种通过offer/answer模型建立的UDP媒体流的NAT穿越技术。该库的代码实现主要参考了WebRTC的相关模块。WebRTC是Google开源的一个音视频实时通信项目。

学习资源

如果对RTC技术比较感兴趣,推荐学习:

应用案例

使用libice开发的低延迟直播系统,在线体验:https://www.str2num.com/xrtchome/xrtcclient/pushcam

ICE(Interactive Connectivity Establishment)简介

RFC5245规范将ICE定义为: 一种通过offer/answer模型建立的UDP(尽管可以扩展到其它的协议,比如TCP)媒体流的NAT穿越技术。ICE是offer/answer模型的扩展,它通过在SDP的offer和answer中包含多个IP地址和端口,然后对这些IP地址和端口进行点到点的连通性检查来进行工作。SDP中包含的IP地址和端口以及进行连通性检查将使用修订的STUN规范,这个规范定义在RFC5389当中,并重命名为Session Traversal Utilities for NAT。新名称和新规范反映了STUN只是用于其它NAT穿越技术(ICE)的一个工具,而不是原来的STUN规范定义的作为一个独立的NAT穿越解决方案。ICE也使用NAT中继穿越TURN,该规范定义在RFC5766,它是STUN的扩展。由于ICE为每个媒体流交换了多个IP地址和端口,因此它允许为多宿主和双栈主机选择地址,并且不赞成使用RFC4091和RFC4092。

一个典型的ICE部署场景:

                              +-------+                              | SIP   |           +-------+          | Srvr  |          +-------+           | STUN  |          |       |          | STUN  |           | Srvr  |          +-------+          | Srvr  |           |       |         /         \         |       |           +-------+        /           \        +-------+                           /             \                          /               \                         /                 \                        /                   \                       /  <-  Signaling  ->  \                      /                       \                     /                         \               +--------+                   +--------+               |  NAT   |                   |  NAT   |               +--------+                   +--------+                 /                                \                /                                  \               /                                    \           +-------+                             +-------+           | Agent |                             | Agent |           |   L   |                             |   R   |           |       |                             |       |           +-------+                             +-------+

ICE的主要工作就是在Agent L和Agent R之间,找到一条或者多条路径,使得L和R可以实时通信。

libice特点

由于本库的实现主要是为了满足在服务端转发WebRTC媒体流,而一般对外提供服务的服务器都有公网IP地址,所以该库的实现主要基于通信的两个peer要么位于同一个局域网,要么至少一个peer不在NAT后面。同时根据实际情况,对RFC5245定义的功能在实现上有所取舍。

与另外一个ICE实现库libnice相比,libnice依赖一个比较庞大的glib库,整个库显得比较重,编译安装非常麻烦,并且接口使用也不是很简洁。libice则主要参考了WebRTC的实现,只引入了小巧的libev作为网络事件库,整个库比较小巧,编译安装简单,接口使用也很方便, 同时代码量也不大,学习也比较简单。

相关RFC规范

要求

  • 目前仅适用于Linux平台
  • gcc版本建议使用gcc-4.8.4及其更高版本, 该库使用了大量的c++11语法,gcc版本过低将无法编译通过
  • 依赖libev-4.22或者以上版本
  • openssl版本不低于1.0.0

编译安装

编译工具

本库的编译采用了buildmake工具,可以帮助你生成Makefile文件,buildmake是一个使用非常简单的编译环境构建工具,推荐使用。buildmake使用教程:https://github.com/str2num/buildmake

编译步骤

# 在你的工作目录下,建立一个目录mkdir -p libice/str2num# 进入建立的目录cd libice/str2num# 获取代码git clone https://github.com/str2num/libice.git# 修改项目根目录下的BUILDMAKE文件vim BUILDMAKEBUILDMAKE_BIN_PATH('~/opensource/buildmake/buildmake')# 该选项路径务必修改为你自己机器上的buildmake工具执行路径# 执行buildmake命令# libice库依赖另外一个git项目librtcbase,-U选项可以帮助你获取librtcbase库 -B表示执行编译# 需要注意的是:librtcbase依赖libev, librtcbase在编译过程遇到问题,请参考https://github.com/str2num/librtcbasebuildmake -UB# 执行make, make成功之后会在项目根目录生成一个output,output目录包含libice的库文件make

说明

  • 该库在Ubuntu 16.04.4 LTS、Ubuntu 14.04、CentOS release 6.5等平台编译通过,并正常使用。
  • gcc-4.8.4, gcc-5.4.0已验证编译通过。
  • 该库移植于Google的WebRTC项目,功能已经过了严格的单元测试, 所以该项目没有提供单元测试用例。
  • 后续会持续跟进WebRTC项目的最新进展,同时该库也会相应的持续维护和更新。

示例

  • 在项目的example目录,有一个示例demo,使用libice库实现了一个简单版的1v1消息聊天软件。
  • 一个1v1实时音视频通话的demo。https://www.str2num.com/demos/videochat

帮助文档

该库的帮助文档,正在积极建设当中,敬请期待, 谢谢!

贡献者

ji_wei8888@163.com

About

libice是一个c/c++库,它实现了RFC5245规范定义的交互式连接建立(ICE)协议, 适用于实时通信领域,比如音视频实时通信。

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp