百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

网络流媒体经典开源软件宝典webRTC, FFMpeg, SIP_流媒体开发教程

toyiye 2024-04-03 23:10 111 浏览 0 评论

关于webRTC

WebRTC,网页即时通讯(英语:Web Real-Time Communication),是直接在 Web 浏览器内驱动实时通信(语音、视频和任意数据)方法的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准,并于 2011 年标准化。谷歌开源的一款产品。

简单的说:WebRTC 是一种 HTML5规范,他无需在浏览器中安装任何插件可以在网页内进行实时通信工作的开源技术,它直接在浏览器和设备之间添加实时媒体通信。

到 2016 年,估计安装了 20 亿个可以与 WebRTC 一起工作的浏览器。从流量的角度来看,仅浏览器通信就估计每周传输超过 10 亿分钟和 500 TB 的数据。

WebRTC(Web Real-Time Communication)(网页实时通信)是一个谷歌开源项目,它提供了一套标准API,使Web应用可以直接提供实时音视频通信功能,不再需要借助任何插件。

为什么使用WebRTC

WebRTC的优点

  • 跨平台:可以在Web、Android、iOS、Windows、MacOS、Linux环境下运行WebRTC应用
  • 实时传输:传输速度快,延迟低,适合实时性要求较高的应用场景
  • 音视频引擎:强大的音视频处理能力
  • 免插件:不需要安装任何插件,打开浏览器即可使用
  • 免费:虽然WebRTC技术已经较为成熟,集成了最佳的音视频引擎和十分先进的Codec,但仍是免费的
  • 主流浏览器支持:包括Chrome、Safari、Firefox、Edge等

WebRTC的作用

音视频会议、在线教育、即时通信工具、游戏、人脸识别

如何实现

WebRTC一对一通话原理

WebRTC由四部分组成,分别为两个WebRTC终端、一个信令服务器、一台中继服务器(STUN/TURN)和两个NAT,这是最经典的一对一通信架构。

通话过程需要三个主要步骤分别是:媒体协商、网络协商、建立连接。

媒体协商

首先两个客户端想要创建连接,一般来说需要有一个双方都能访问的服务器来帮助它们交换连接所需要的信息。这个服务器叫做信令服务器。

与服务器建立连接后,通信的双方就可以通过信令服务器彼此交换必要的信息了,比如告诉对方自己的外网IP地址和端口是多少等。

双方交换的媒体数据由SDP(Session Description Protocol,会话描述协议)描述

网络协商

在交换信息之前WebRTC终端还要与STUN/TURN服务器建立连接。这样做的目的是通过STUN/TURN服务器获得各自的外网IP地址和端口。

WebRTC终端拿到自己的外网IP地址和端口后,再通过信令服务器交换给对方。当彼此获得对方地址后,它们就可以尝试NAT穿越,进行P2P连接了。这个过程涉及NAT及ICE协议。

STUN

STUN是指简单UDP穿透NAT,这项技术允许位于NAT后的客户端找出自己的公网IP地址,以及查出自己位于哪种类型的NAT及NAT所绑定的Internet端口。

TURN

TURN是指使用中继穿透NAT,是STUN的一个扩展,主要添加了中继功能。

如果终端在进行NAT之后,在特定的情景下有可能使得终端无法和其他终端进行直接的通信,这时就需要将公网的服务器作为一个中继,对来往的数据进行转发。这个转发采用的协议就是TURN。

建立连接

连接双方通过第三方服务器即信令服务器来交换各自的SDP数据。

连接双方通过STUN协议从STUN服务器那里获取到自己的NAT结构、子网IP和公网IP、端口,即Candidate信息。

连接双方通过第三方服务器来交换各自的Candidate,如果连接双方在同一个NAT下,那它们仅通过内网Candidate就能建立起连接;如果它们处于不同NAT下,就需要通过STUN服务器识别出的公网Candidate进行通信。

如果仅通过STUN服务器发现的公网Candidate仍然无法建立连接,这就需要寻求TURN服务器提供的转发服务,然后将转发形式的Candidate共享。

webRTC可以跨平台

二、webRTC原理与架构

绿色为webRTC核心功能,紫色部分为浏览器提供的js的api层,即浏览器对C++ API做了一层封装

绿色部分,核心层,分为四层:

C++层,PeerConnection对等连接,其中包含很多API:传输质量,传输数据,传输统计报告,音视频设备管理,采集,等

session层,上下文管理

音视频引擎和传输(音频:编码器/防抖动/回音消除和降噪,视频:编码器/防抖动buffer/图像增强,传输:底层UDP,应用层RTP/SRTP/RTCP)

音频的采集和渲染,视频的采集(没有视频渲染,需要浏览器应用层自己做)【虚线部分允许浏览器自己进行重载】

三、webRTC源码目录结构

四、webRTC信令服务器

1.原理

每个公司的业务模型不一样,因此没有统一规范

信令服务器的作用:

信令服务器要传输的信息:

1.SDP

2.网络信息,用于建立p2p

3.具体的业务信息

2.信令服务器实现

建议使用socket.io

为什么使用socket.io

1、socket.io时WebSocket的超集,本身就支持WebSocket的功能

2、信令服务器需要基于TCP协议,因为需要保证可靠性,而WebSocket底层使用的就是TCP协议

3、socket.io本身就带有房间的概念

4、socket.io是跨平台、跨终端、跨语言的,开发方便

五、webRTC传输基本知识

1、NAT(Network Address Translator)

将内网地址转换为公网地址,内网地址无法通讯,通过NAT转换为公网之后,才有通信的可能

2、STUN(Simple Traversal of UDP Through NAT)

充当中介作用,交换两个公网的信息,使得两个公网之间可以建立连接

3、TURN(Traversal Using Relays around NAT)

在云端架设一个服务器,在P2P连接不成功情况下,保证音视频互通

4、ICE(Interactive Connectivity Establishment)

罗列所有通信可能性(STUN、TURN),选择最优解

关于FFMpeg

ffmpeg与webRTC区别

ffmpeg用于处理多媒体文件的编辑,音视频的编解码

webRTC用于处理多网络抖动,丢包评估,回音消除,降噪

关于SIP

SIP(Session initialization Protocol,会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。

它是一个基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。SIP 是一种源于互联网的IP 语音会话控制协议,具有灵活、易于实现、便于扩展等特点。

SIP(Session Initiation Protocol)是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以是Internet多媒体会议、IP电话或多媒体分发。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。

SIP与负责语音质量的资源预留协议(RSVP)互操作。它还与若干个其他协议进行协作,包括负责定位的轻型目录访问协议(LDAP)、负责身份验证的远程身份验证拨入用户服务 (RADIUS) 以及负责实时传输的 RTP 等多个协议。

随着计算机科学技术的进步,基于分组交换技术的IP数据网络以其便捷性和廉价性,取代了基于电路交换的传统电话网在通信领域的核心地位。SIP协议作为应用层信令控制协议,为多种即时通信业务提供完整的会话创建和会话更改服务,由此,SIP协议的安全性对于即时通信的安全起着至关重要的作用。

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码