范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

WebRTC成为HTML5标准!是时候学习了!

  大家好,很高兴又见面了,我是" 高级前端‬进阶 ‬",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!
  高级前端‬进阶
  今天带着大家一起了解下WebRTC,话不多说,直接进入正题。1.什么是 WebRTC?
  WebRTC 是一组 JavaScript API,可以在两个浏览器之间建立点对点连接, 实现音频和视频等数据的传输,可以用它创建有语音/视频通话功能的应用程序。
  WebRTC 的特别之处是,一旦建立了连接,就可以直接在浏览器之间实时传输数据,不需要借助服务器,因此降低了延迟,所以用户都喜欢用 webRTC 直接传输音视频。
  在WebRTC诞生之前,开发实时音视频应用的成本是非常高,需要考虑的技术问题很多,如音视频的编解码,数据传输延时、丢包、网络抖动、回音处理和消除等,如果要兼容浏览器端的实时音视频通信,还需要额外安装插件。可喜的是,本文的主角WebRTC在2021年1月被W3C和IETF发布为正式标准,而且得到了大多数主流浏览器的支持。
  2.WebRTC 与 WebSockets的区别
  在讨论 WebRTC 的工作原理之前,先看看 WebRTC 和 WebSockets 的对比,因为很多人都会觉得"听着跟 WebSockets 一样,用 WebSockets 就好了,为什么需要 WebRTC "?
  使用 websockets 也可以建立点对点连接,实时传输数据,但这种连接是在客户端和服务器之间。因此,如果我向某一对等点发送消息,这个消息会先传送到服务器,然后服务器再把这个消息发送给另一个对等点。通常来说,这种传输非常快,如果大家发送的是聊天信息或某些通知,即使有一些延迟也注意不到。
  但如果我们用 websockets 传输音视频情况就不一样了。用 websockets 传输音视频时,即使有非常轻微的延迟也会非常明显,还会导致很多其他问题。当视频数据到达服务器并返回对等点时,用户会感觉到明显的延迟。
  而这就是 webRTC 的优势所在,在两个浏览器之间建立连接并直接交换数据,消除了服务器可能导致的延迟,WebRTC 还使用了用户数据报协议(UDP),这些都有利于数据的快速传输。
  通常WebRTC会与WebSocket配合使用,WebSocket的作用主要是用来交换客户端的SDP与网络信息,Websocket传输的内容与真正通信数据无关,只是协助WebRTC建立连接。  3.用 webRTC 传输数据这么快,为什么还需要 websockets?
  webRTC 有一定的局限性,所以通常会同时使用 webRTC 和 websockets。
  首先,webRTC 使用 UDP,但是用 UDP 传输重要数据会有点不太可靠。UDP 的优势在于传输数据非常快,劣势在于它不检查数据是否被成功接收。所以,可以用 UDP 来传输视频,就算传输过程中丢失了几帧,也没啥大问题;但如果是发送文件,丢失几个字节的数据就会导致整个文件的损坏。
  另外,WebRTC 没有内置信令,所以只用 WebRTC 没法建立点对点的连接,但一旦建立了连接,WebRTC 就可以处理所有问题,至于如何传输初始数据来连接两个对等点则由我们决定。
  4.两个客户端之间传送什么,如何发送?
  首先,信息的发送通常是通过一个叫做信令的过程。由于两个对等点不了解对方的情况,我们通常会使用 WebSockets 或其他第三方信令服务将两个对等点引入同一个频道。
  当把两个对等点引入同一个频道或房间时,他们就可以通过连接细节发出信号。这些连接细节以会话描述协议(SDP)和 ICE (Interactive Connectivity Establishment,交互式连接创建)候选人的形式出现。
  SDP ——会话描述协议(SDP),是一个包含会话连接(如编解码器、地址、媒体类型、音频和视频等)信息的对象。两个对等点会交换 SDP 来了解如何实现连接。一个是 SDP Offer 形式,另一个是 SDP Answer 形式。
  ICE 候选人——ICE 候选人是公共 IP 地址和端口,可以做接收数据的地址。通常来说,每个用户会有多个 ICE 候选人,这些 ICE 候选人是向 STUN 服务器发出一系列请求来收集的。
  5.事件发生顺序
  首先,两个对等点会使用某种信令方法来传输 SDP。一旦两个 SDP 传输完成,对等点就连接成功,但这时还不能传输数据。
  要在两个对等点之间交换数据,我们要先传输数据。问题是,现在大多数设备都位于防火墙和 NAT 设备后面,因此,为了协调公共 IP 地址的发现,我们使用 ICE (Interactive Connectivity Establishment,交互式连接创建)方法。
  一旦后台传输了 SDP 提议,每个对等点就会向 STUN 服务器发出一系列请求,该服务器会生成一个 ICE 候选人列表。STUN 服务器的成本很低,并且容易维护,有非常多的免费服务,所以大家可以设置一个。
  一旦对等点 1 从 STUN 服务器获得这些 ICE 候选人,就会把这些候选人发送给对等点 2,让网络决定要使用的最佳候选人。对等点 2 会进行同样的操作,请求 ICE 候选人,然后将其发送给等点 1。
  当这些候选人传输成功并发现一条最佳路径时,数据就可以开始在两个对等点之间流动。5.WebRTC API调用5.1 RTCPeerConnection
  RTCPeerConnection用于点对点之间建立连接以传输音视频数据流,这是RTCPeerConnection的任务,为此需要借助一个信令服务器(signaling server)来进行,信令包括3种类型的信息:Session control messages: 初始化和关闭通信,及报告错误;Network configuration: 双方的IP地址和端口号(局域网内部IP地址需转换为外部的IP地址);Media capabilities: 双方的浏览器支持使用何种编码以及多高的视频分辨率。var PeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; navigator.getUserMedia = navigator.getUserMedia ? "getUserMedia" :     navigator.mozGetUserMedia ? "mozGetUserMedia" :     navigator.webkitGetUserMedia ? "webkitGetUserMedia" : "getUserMedia"; var v = document.createElement("video"); // 创建信令(createOffer) var pc = new PeerConnection(); pc.addStream(video); pc.createOffer(function(desc) {     pc.setLocalDescription(desc, function() {         // send the offer to a server that can negotiate with a remote client     }); }) // 创建回复(createAnswer) var pc = new PeerConnection(); pc.setRemoteDescription(new RTCSessionDescription(offer), function() {     pc.createAnswer(function(answer) {         pc.setLocalDescription(answer, function() {             // send the answer to the remote connection         });     }); })5.2 RTCDataChannel
  RTCDataChannel 接口代表在两者之间建立了一个双向数据通道的连接,可以用
  RTCPeerConnection.createDataChannel() 或者在现有的 RTCPeerConnection 上用 RTCDataChannelEvent 类型的 datachannel 事件接收,创建出 RTCDataChannel 类型的对象。 var pc = new RTCPeerConnection(); // 获取RTCPeerConnection对象 var dc = pc.createDataChannel("my channel"); // 创建DataChannel对象 dc.onmessage = function (event) {   console.log("received: " + event.data); }; dc.onopen = function () {   console.log("datachannel open"); }; dc.onclose = function () {   console.log("datachannel close"); };5.3 访问用户摄像头及麦克风getUserMedia
  WebRTC支持直接传输音频流和视频流(https://appr.tc/): const pc = new RTCPeerConnection() ; // 获取RTCPeerConnection navigator.getUserMedia({ video: true }, stream => {    // 添加视频流到会话中   stream.getTracks().forEach(track => pc.addTrack(track, stream))    // 在网页中预览自己摄像头拍摄到的内容,其中$localVideo表示一个Video对象   $localVideo.srcObject = stream;  })
  navigator.getUserMedia()还可以和web Audio API相结合,用来处理音频效果: var range = document.querySelector("input"); window.AudioContext = window.AudioContext || window.webkitAudioContext; var audioCtx = new AudioContext(); navigator.getUserMedia({     audio: true }, function(stream) {     // 创建音频流     var source = audioCtx.createMediaStreamSource(stream);     // 双二阶滤波器     var biquadFilter = audioCtx.createBiquadFilter();     biquadFilter.type = "lowshelf";     biquadFilter.frequenc.value = 1000;     biquadFilter.gain.value = range.value;     source.connect(biquadFilter);     biquadFilter.connect(audioCtx.destination); }, function(error) {     console.log(error); });
  其实,WebRTC并不只是用来做视频、音频,它还可以用来传输任意数据,包括文件,文本等。上面代码示例可以看到,WebRTC规定了 dataChannel 这个双工数据通道,而https://snapdrop.net/这个网站就是通过WebRTC进行文件分享。 const pc = new RTCPeerConnection()  const dataChannel = pc.createDataChannel("chat")  // 监听datachannel事件 pc.addEventListener("datachannel", event => {    // 接收通信方发送过来的数据   event.channel.addEventListener("message", event => {      console.log("message", event.message)    })  })  dataChannel.addEventListener("open", () => {    // 发送数据,可发送任意数据    dataChannel.send("Hi!")  })  dataChannel.addEventListener("close", event => {  })
  参考资料
  https://medium.com/agora-io/how-does-webrtc-work-996748603141
  https://www.agora.io/cn/community/blog/24640
  https://www.yuque.com/guiqulaixi-2ciw1/ltzgfd/xqgx3h9zdwxxszd9
  https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel
  https://caniuse.com/?search=WebRTC
  https://www.jianshu.com/p/1022f559a805
  https://zhuanlan.zhihu.com/p/421503695
  https://github.com/nashaofu/webrtc-demo
  https://blog.csdn.net/xyphf/article/details/107297616
  https://flashphoner.com/server-to-server-webrtc/

A股明天(2月10日)要注意了,有一个隐患或触发冲高回落收阴!中午维持预判,提出反抽已成定局,下午不仅会收红盘兑现中阳线,甚至有突破并站上10日线的可能!结果大盘在下午不负众望,继续上攻的同时也确实破掉了10日线,截止到收盘,上证指数站上此线社保断交有什么影响?从五个方面为您说明养老保险制度的实施和推行,使得我国国民能够老有所依老有所养,社保关系着国民生活过程中会涉及的各种比较特殊的事件,按照相应的要求,我国国民需要至少缴纳十五年的社保才能在退休之后每月领骁龙8第三代处理器配置曝光,使用152的架构,x4大核骁龙8第三代处理器规格曝光,这次的思路看起来是152的架构。骁龙8第二代一个x3大核,3。2g赫兹,四个性能核心,2个a715和2个a710,都是2。8g赫兹的频率。三个a510小ChatGPT神了!预测魅族20新机配置,是扯犊子还是真爆料?ChatGPT神了!预测魅族20新机配置,是扯犊子还是真爆料?要说近段时间超火的一大技术,必定少不了ChatGPT。ChatGPT是什么?它是美国开放人工智能研究中心研发的聊天机器英特尔将推出酷睿i713790F处理器?又一款国内特供黑盒包装产品去年英特尔针对国内市场推出了一款名为酷睿i512490F的处理器,与酷睿i512500的规格非常相似。区别在于酷睿i512490F有更大的L3缓存,而酷睿i512500则拥有UHD儿童康复100问系列呼吸康复(二)呼吸康复仅对于呼吸功能障碍的患者才有用吗?答并不是。中枢神经系统方面呼吸受脑部呼吸中枢神经元调控,脑部血流同样受呼吸功能的调节,在呼吸康复治疗过程中,控制患通气量,可降低因ICP(男孩遗精后还能长多高?很多家长都非常关心孩子们的身高发育,特别是男孩子。当男孩有了遗精现象后很多家长都在问我医生孩子遗精了是不是就不长个了?遗精后还能长高多少呢?今天针对这些问题我来回答一下。身高男孩遗5岁儿童会发生胆结石吗?看看这篇文章就知道了5岁的熙熙身体健康,活泼可爱,平日里连感冒都很少得。可就在几天前,熙熙突然出现腹痛,主要的痛点在右上腹,偶尔还伴有恶心。家人急忙带熙熙到当地医院就诊,超声检查提示胆囊高回声团,肝脏不知道做什么时做什么?孩子问有时突然觉得不知要干什么。那要做什么呢?如果没有一个明确的选择进来,电子娱乐和零食便会向孩子欢快招手。大人回答道不知道做什么时,就读书。书是人最好的朋友。好的书很快就能带我们原神V3。4角色计算夜兰天赋加点武器圣遗物选择命座提升大家好,这里是蒙德蒲公英酒。本期攻略计算一下夜兰的伤害,总共为五个方面的计算,分别为天赋武器圣遗物套装圣遗物主词条命座,通过计算对比可以很直观的得到一些结论,即天赋加点顺序武器选择原神为什么0命夜兰宁愿用西风猎弓,也不抽专武若水弓?众所周知,原神中最保值的不是主C,而是辅助。不管是迪卢克,还是胡桃,都要放在合适的阵容,才能打出应有的效果。有趣的是,虽然主C人均专武。但那些被我们认为是超模的辅助,往往对武器的要
为什么现在的有钱人,都喜欢到大山里农村建房居住?谢谢题主邀请你的问题我回答如下愿你满意城里的有钱人为什么选择在大山里建房,首先,大山里清静,环境优雅,空气清新,农村大山里环境好,也是吸引一些人们回到大山里建房的一个因素。在大城市你刚做会计的前几年有多惨?不惨,进的大企业,从成本起步,后来各个岗位都能对付,第二年进初级,第四年考过中级,天道酬勤,付出必有回报。还好,有人教我虽没有做会计,但是我知道刚从学校毕业的上班初的几年是要多干多你户口上的名字有没有被写错?没有错错了,很不好改,改了。我的名字本来应该是王郡洪,办身份证的时候不知哪位老先生给写成王君红。君是君子的君,红是红旗的红,感觉很好。于是我将错就错了!赞玫瑰祈祷害羞呲牙我的户口本作为国粹京剧,官方认可,老百姓的认可度高吗?毛主席教导文艺必须为工农大众服务!任何文艺不为劳苦大众服务它就没有生命力!广大人民群众喜欢的文艺就是国粹!样板戏是毛泽东文艺为工农大众服务思想的伟大成果!深受人民的喜爱!我国是个多当初班上第一名和倒数第一的同学,工作后有多大差距?只讲学校的差别,一个词天壤之别!无论个人学习习惯,上课听讲状态还是作业完成情况都天差地别!没有对比就没有伤害!学生在家长和老师眼中为什么不一样,因为在家长眼中没有对比?说来也搞笑,如何看待中山未来3年的房价?中山未来楼市将会开始冰冻,大概率均价会突破5000以下,损失最大就是马鞍岛,跌到万元以下几乎是定局,主要原因就是大亚湾地铁开通,直接导致中山没有深圳这样的外部购买力,只有靠自己消化如果被判刑了,身份证状态是怎样的?谢邀!犯罪嫌疑人的身份证会作为随身物品由公安机关代为保管,被判刑后的人员已被剥夺自由的权利,身份证由公检法部门移交狱政部门代管,本人不能随身携带居民身份证,如家属需要临时使用身份证领导安排保安去做杂七杂八的活,可以拒绝吗?可以拒绝,保安干十二歇二十四,等于毎日干八小时,没周休,没节假日,三线城市月工资也就1500元左右,没加班工资,没夜班补贴。保安职责本身就不少车辆人员出入管理夜间安全巡逻小区車辆停山东有哪些专科院校?哪所专科院校毕业后的发展前景比较好?师范类除了师范类本科院校招收专科生外,专科类学校有淄博师专济南幼儿师范专科学校高职类有青岛职业技术学院烟台职业学院济南职业学院潍坊工程职业学院。护理类除了像泰山医学院济宁医学院招收西南石油大学的学生毕业后一般去哪里了?西南石油大学从诞生的那一天开始,就为中国的石油工业在培养着优秀的工程技术人员和科学研究人员,为中国石油工业的发展立下了赫赫战功,谱写了光辉篇章。西南石油大学建校60年来,坚持以不断你见过最抠门的人是什么样子的?我老姨55岁,和62岁的退休镇长搭伙过日子,才第3天我就被他的抠门,差点气晕过去,赶紧离开了他的家。我老家的姨,老伴过世的早。孩子们怕她孤单,想给她找个老伴搭伙过儿子,然后拜托老家