1、什么是WebRTC

WebRTC (Web Real-Time Communications)是一项实时通讯的技术,旨在使得浏览器能为实时通信提供简单的JavaScript接口,让浏览器通过JS实现即时通信接口。这个接口是通过一系列的信令,建立一个浏览器与浏览器之间(peer-to-peer)的信道,这个信道可以发送任何数据,而不需要经过服务器。并且WebRTC通过实现MediaStream,通过浏览器调用设备的摄像头、话筒,使得浏览器之间可以传递音频和视频。

2、相关开源框架

当前Webrtc技术已经成熟,各大公司都在自己的产品中集成Webrtc功能,Webrtc除了要实现视音频通信外还有需要实现信令传输,而Webrtc的核心模块就是流转发模块,即流媒体服务器,如果要自已实现流媒体服务器困难还是比较大的,付出的时间成本也将不少,它里面要涉及到去研究 DTLS 协议、ICE 协议、SRTP/SRTCP 协议等方面,光理解这些协议就要花不少的时间,更何况要去实现它了,所以最快捷的办法就是使用开源的实现,在构建实时多媒体应用时,服务器技术的选择至关重要。该领域的两大巨头是Janus和MediaSoup,它们都支持 WebRTC 功能。

Mediasoup

由应用层和数据处理层组成。应用层是通过 Node.js 实现的;数据处理层由 C++ 语言实现,包括 DTLS 协议实现、ICE 协议实现、SRTP/SRTCP 协议实现、路由转发等。Mediasoup 把每个实例称为一个 Worker,在 Worker 内部有多个 Router,每个 Router 相当于一个房间。在每个房间里可以有多个用户或称为参与人,每个参与人在 Mediasoup 中由一个 Transport 代理。换句话说,对于房间(Router)来说,Transport 就相当于一个用户。

Github开源地址:https://github.com/versatica/mediasoup

Kurento

Kurento是WebRTC媒体服务器和一组客户端API,可简化针对WWW和智能手机平台的高级视频应用程序的开发。Kurento Media Server的功能包括组通信,音视频流的转码,记录,混合,广播和路由。作为一项与众不同的功能,Kurento Media Server还提供了高级媒体处理功能,包括计算机视觉,视频索引,增强现实和语音分析。Kurento模块化体系结构简化了第三方媒体处理算法(即语音识别,情感分析,面部识别等)的集成,可以由应用程序开发人员透明地用作Kurento的其余内置功能。Kurento的功能和文档都相当出众,文档尤佳,功能介绍极其透彻。Janus 则实为 C 语言开发的 WebRTC 网关,支持 GPR 协议,GitHub Star 数较多,性能也非常好。

Github开源地址:https://github.com/Kurento/kurento

https://github.com/Kurento/kurento-media-server

https://doc-kurento.readthedocs.io/en/latest/user/installation.html

Janus

Janus 是一款开源的通用 WebRTC 网关,由Meeteco设计和开发。专为实时通信而设计。其模块化架构、广泛的协议支持和丰富的功能使其成为实时多媒体应用领域最受欢迎的解决方案之一。Janus 可作为不同多媒体组件之间的桥梁,转换协议并实现各种实时功能。它不仅限于 WebRTC,还支持 SIP、RTSP 和普通 RTP 等协议。Janus 可使用插件架构进行扩展,使其适用于流媒体、视频会议和录制等各种用例。

Github开源地址:https://github.com/meetecho/janus-gateway

官网:https://janus.conf.meetecho.com/

3、Janus媒体模块

ICE:打洞,负责与Peer的连通,Janus可以部署在NAT后⾯,使⽤了libnice;

DTLS:UDP版的TLS,就是加密的UDP,WebRTC⽤来传递SRTP的密钥,使⽤了OpenSSL/BoringSSL;

RTP/RTCP:提供RTP/RTCP 封包解包的接⼝,需要发送⼀些WebRTC⽀持的RTCP包,例如FIR、PLI、RR等;

SRTP:加密的RTP,开启后WebRTC传输的RTP负载都是加密的;

SDP:提供SDP封/解包的接⼝,⽤于协商媒体的协议,可以⽤SDP对WebRTC的⼀些功能进⾏设定(编码器优先、码率限制),媒体能⼒的协商;

candidate:⽹络信息,⽹络协商;

SCTP:WebRTC的数据通道使⽤的协议,就是加上了流控的UDP,可以传输任意数据

4、Coturn打洞服务器

Github地址:

https://github.com/coturn/coturn

WebRTC开源框架的更多相关文章

  1. 跨平台的WebRTC客户端框架:OpenWebRTC

    Webrtc的ios框架编译 http://www.th7.cn/Program/IOS/201502/390418.shtml WebRTC in WebKit : http://www.webrt ...

  2. Android 开源框架Universal-Image-Loader学习

    Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二)--- 图片 ...

  3. iOS常用第三方开源框架和优秀开发者博客等

    博客收藏iOS开发过程好的开源框架.开源项目.Xcode工具插件.Mac软件.文章等,会不断更新维护,希望对你们有帮助.如果有推荐或者建议,请到此处提交推荐或者联系我. 该文档已提交GitHub,点击 ...

  4. 值得推荐的android开源框架

    1.volley 项目地址https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载: (2) 网络请求的排序(scheduling) ...

  5. 介绍一个非常好用的跨平台C++开源框架:openFrameworks

    介绍一个非常好用的跨平台C++开源框架:openFrameworks 简介 首先需要说明的一点是: openFrameworks 设计的初衷不是为计算机专业人士准备的, 而是为艺术专业人士准备的, 就 ...

  6. iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇

    完整项目 v2ex – v2ex 的客户端,新闻.论坛.apps-ios-wikipedia – apps-ios-wikipedia 客户端.jetstream-ios – 一款 Uber 的 MV ...

  7. Android开源框架:NineOldAndroid

    在android3.0以前的版本,要实现动画,一般是使用NineOldAndroid开源框架,之后,就可以直接使用android提供的animation API了. 仔细看过此开源框架后,可看出此框架 ...

  8. 【python】15个最受欢迎的Python开源框架

    Django: Python Web应用开发框架 Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响.Django是走大而全的方向,它最出名的是其全自动化的管理后台: ...

  9. 10个顶级的CSS UI开源框架

    随着CSS3和HTML5的流行,我们的WEB页面不仅需要更人性化的设计理念,而且需要更酷的页面特效和用户体验.作为开发者,我们需要了解一些宝贵的CSS UI开源框架资源,它们可以帮助我们更快更好地实现 ...

  10. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

随机推荐

  1. 【C++ OOP 02 对象的初始化和清理】构造/析构函数、深/浅拷贝、初始化列表以及静态成员

    [对象的初始化和清理] 生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候也会删除一些自己信息数据保证安全 C++中的面向对象来源于生活,每个对象也都会有初始设置以及 对象销毁前的清理数据 ...

  2. 【LeetCode数组#2双指针法】移除元素、删除有序数组中的重复项、移动0

    移除元素 力扣27题目链接(opens new window) 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组 ...

  3. 【Azure ACR+App Service】ACR WebHook请求App Service时遇见 401 Unauthorized

    问题描述 App Service 支持从ACR中直接拉取镜像,并且可以配置持续部署(Continuous Deployment), 它是通过在ACR中添加一个Webhook,然后发送POST请求到 & ...

  4. 【Azure 环境】AAD 注册应用获取AAD Group权限接口遇 403 : Attempted to perform an unauthorized operation 错误

    问题描述 通过Azure AD的注册应用获取到Token后,访问AAD Group并查看日志信息时候,遇见了 {"error":{"code":"Un ...

  5. C++//queue 队列 容器 先进先出 只有队头 队尾能被外界访问 因此不允许有遍历行为

    1 //queue 队列 容器 先进先出 只有队头 队尾能被外界访问 因此不允许有遍历行为 2 3 4 #include<iostream> 5 #include<queue> ...

  6. php编写日历类

    <?php /** * 日历类 * Class Calendar * @author fengzi * @date 2022-05-05 15:42 */ class Calendar{ pro ...

  7. 手把手带你认识GaussDB轻量化运维管理工具

    本文分享自华为云社区<GaussDB轻量化运维管理工具介绍>,作者: Gauss松鼠会小助手. 一.GaussDB 运维管理平台简介 开放生态层 友好Web界面,多云皮肤个性化定制 丰富的 ...

  8. 在Visual Studio 中使用git系列文章目录

    在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...

  9. vue3,实战项目随心笔记

    本项目模仿bibi 网站,主要是做一个pc和手机端的应用案例,主要涉及支付,三方登陆,css原子,妹子ui,路由缓存,组件封装,tailwindcss,vueuse 等常见企业级术应用, 由于本项目是 ...

  10. axios post xml data方法

    axios#request(config) axios#get(url[,config]) axios#delete(url[,config]) axios#head(url[,config]) ax ...