游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

WebRTC已成为HTML5标准?是时候开始学习了?

  1。什么是WebRTC?
  WebRTC是一组JavaScriptAPI,可以在两个浏览器之间建立点对点连接,实现音频和视频等数据的传输,可以用它创建有语音视频通话功能的应用程序。
  WebRTC的特别之处是,一旦建立了连接,就可以直接在浏览器之间实时传输数据,不需要借助服务器,因此降低了延迟,所以用户都喜欢用webRTC直接传输音视频。
  在WebRTC诞生之前,开发实时音视频应用的成本是非常高,需要考虑的技术问题很多,如音视频的编解码,数据传输延时、丢包、网络抖动、回音处理和消除等,如果要兼容浏览器端的实时音视频通信,还需要额外安装插件。可喜的是,本文的主角WebRTC在2021年1月被W3C和IETF发布为正式标准,而且得到了大多数主流浏览器的支持。
  CanIUse中WebRTC的浏览器支持情况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(InteractiveConnectivityEstablishment,交互式连接创建)候选人的形式出现。
  SDP会话描述协议(SDP),是一个包含会话连接(如编解码器、地址、媒体类型、音频和视频等)信息的对象。两个对等点会交换SDP来了解如何实现连接。一个是SDPOffer形式,另一个是SDPAnswer形式。
  ICE候选人ICE候选人是公共IP地址和端口,可以做接收数据的地址。通常来说,每个用户会有多个ICE候选人,这些ICE候选人是向STUN服务器发出一系列请求来收集的。
  5。事件发生顺序
  首先,两个对等点会使用某种信令方法来传输SDP。一旦两个SDP传输完成,对等点就连接成功,但这时还不能传输数据。
  要在两个对等点之间交换数据,我们要先传输数据。问题是,现在大多数设备都位于防火墙和NAT设备后面,因此,为了协调公共IP地址的发现,我们使用ICE(InteractiveConnectivityEstablishment,交互式连接创建)方法。
  一旦后台传输了SDP提议,每个对等点就会向STUN服务器发出一系列请求,该服务器会生成一个ICE候选人列表。STUN服务器的成本很低,并且容易维护,有非常多的免费服务,所以大家可以设置一个。
  一旦对等点1从STUN服务器获得这些ICE候选人,就会把这些候选人发送给对等点2,让网络决定要使用的最佳候选人。对等点2会进行同样的操作,请求ICE候选人,然后将其发送给等点1。
  当这些候选人传输成功并发现一条最佳路径时,数据就可以开始在两个对等点之间流动。5。WebRTCAPI调用5。1RTCPeerConnection
  RTCPeerConnection用于点对点之间建立连接以传输音视频数据流,这是RTCPeerConnection的任务,为此需要借助一个信令服务器(signalingserver)来进行,信令包括3种类型的信息:Sessioncontrolmessages:初始化和关闭通信,及报告错误;Networkconfiguration:双方的IP地址和端口号(局域网内部IP地址需转换为外部的IP地址);Mediacapabilities:双方的浏览器支持使用何种编码以及多高的视频分辨率。varPeerConnectionwindow。RTCPeerConnectionwindow。mozRTCPeerConnectionwindow。webkitRTCPeerConnection;navigator。getUserMedianavigator。getUserMedia?getUserMedia:navigator。mozGetUserMedia?mozGetUserMedia:navigator。webkitGetUserMedia?webkitGetUserMedia:getUserMedia;varvdocument。createElement(video);创建信令(createOffer)varpcnewPeerConnection();pc。addStream(video);pc。createOffer(function(desc){pc。setLocalDescription(desc,function(){sendtheoffertoaserverthatcannegotiatewitharemoteclient});})创建回复(createAnswer)varpcnewPeerConnection();pc。setRemoteDescription(newRTCSessionDescription(offer),function(){pc。createAnswer(function(answer){pc。setLocalDescription(answer,function(){sendtheanswertotheremoteconnection});});})5。2RTCDataChannel
  RTCDataChannel接口代表在两者之间建立了一个双向数据通道的连接,可以用RTCPeerConnection。createDataChannel()或者在现有的RTCPeerConnection上用RTCDataChannelEvent类型的datachannel事件接收,创建出RTCDataChannel类型的对象。varpcnewRTCPeerConnection();获取RTCPeerConnection对象vardcpc。createDataChannel(mychannel);创建DataChannel对象dc。onmessagefunction(event){console。log(received:event。data);};dc。onopenfunction(){console。log(datachannelopen);};dc。onclosefunction(){console。log(datachannelclose);};5。3访问用户摄像头及麦克风getUserMedia
  WebRTC支持直接传输音频流和视频流(https:appr。tc):constpcnewRTCPeerConnection();获取RTCPeerConnectionnavigator。getUserMedia({video:true},stream{添加视频流到会话中stream。getTracks()。forEach(trackpc。addTrack(track,stream))在网页中预览自己摄像头拍摄到的内容,其中localVideo表示一个Video对象localVideo。srcObjectstream;})
  navigator。getUserMedia()还可以和webAudioAPI相结合,用来处理音频效果:varrangedocument。querySelector(input);window。AudioContextwindow。AudioContextwindow。webkitAudioContext;varaudioCtxnewAudioContext();navigator。getUserMedia({audio:true},function(stream){创建音频流varsourceaudioCtx。createMediaStreamSource(stream);双二阶滤波器varbiquadFilteraudioCtx。createBiquadFilter();biquadFilter。typelowshelf;biquadFilter。frequenc。value1000;biquadFilter。gain。valuerange。value;source。connect(biquadFilter);biquadFilter。connect(audioCtx。destination);},function(error){console。log(error);});
  其实,WebRTC并不只是用来做视频、音频,它还可以用来传输任意数据,包括文件,文本等。上面代码示例可以看到,WebRTC规定了dataChannel这个双工数据通道,而https:snapdrop。net这个网站就是通过WebRTC进行文件分享。constpcnewRTCPeerConnection()constdataChannelpc。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。comagoraiohowdoeswebrtcwork996748603141
  https:www。agora。iocncommunityblog24640
  https:www。yuque。comguiqulaixi2ciw1ltzgfdxqgx3h9zdwxxszd9
  https:developer。mozilla。orgenUSdocsWebAPIRTCDataChannel
  https:caniuse。com?searchWebRTC
  https:www。jianshu。comp1022f559a805
  https:zhuanlan。zhihu。comp421503695
  https:github。comnashaofuwebrtcdemo
  https:blog。csdn。netxyphfarticledetails107297616

次韵熊云瀑秋夜见寄其一起个诗意的名字宋代乐雷发吟落秋窗烛灺红,想弹九辩入丝桐。荃衡岂不如葵菽,谁继豳风补楚风。次韵熊云瀑秋夜见寄其一乐雷发介绍宋道州宁远人,字声远。少颖……与王氏履约履吉文氏寿承休承袁起个诗意的名字明代顾璘幽怀洽清夜,兴言陟穹窿。寒景自憭慄,况兹山间中。明月出海嵎,浮云净遥空。二八轮正满,桂影虚玲珑。河汉近人泻,衣袂多烈风。俯窥……示程介夫起个诗意的名字宋代马廷鸾流年何必共君参,九琐青山老一庵。试检乐天诗集看,明年半百又加三。示程介夫马廷鸾介绍马廷鸾(1222年1289年……滦京杂咏一百首其三十五起个诗意的名字元代杨允孚得宠亲王马上回,朱门绣闼一时开。淋漓未了金钗宴,中使传宣御酒来。滦京杂咏一百首其三十五杨允孚介绍元吉安吉水人,字和吉。顺帝……奉和总制陈公江西平贼诗其一起个诗意的名字明代顾璘柏府勋名冠两京,淮西还仗白旄行。登坛气色无群盗,报国谟谋有太平。万壑鼓鼙声震叠,五营刁斗令分明。纷纷骄将皆儿戏,岂识辕门节制兵。……江南曲(二首)起个诗意的名字明代钱百川采莲复采莲,采采不捐手。贪摘双头花,拔断连理藕。江南曲(二首)钱百川介绍常州府无锡人,字东之。弱冠习琵琶。尝半日度四……太液晴波起个诗意的名字明代林环池头旭日散轻烟,开镜清光近九天。翠柳长条经雨后,绿摐香暖得春先。御沟流出通金水,仙派分来自玉泉。在镐几回陪宴乐,永歌《……送皇甫司勋谪开州起个诗意的名字明代梁有誉重渊产明玑,玄圃蕴奇璞。君子抗高谊,信矣迈前躅。摛辞灿国华,矫迹荐朝禄。凄风倏以飘,江海变凉燠。空抱长沙悲,谁知郢人曲。兹……菩提树起个诗意的名字明代陈子升人见菩提树,亦有菩提想。此树无人时,飕飕千叶响。菩提树陈子升介绍(16141673)明末清初广东南海人,字乔生。陈子壮弟。……章岩起个诗意的名字宋代章谦亨杰石何空洞,中藏一寺幽。不须补天漏,时觉有云浮。蟾吐半轮日,鲸吞万斛舟。兹岩本同姓,欲去且迟留。章岩章谦亨介绍……竹里起个诗意的名字明代潘希曾竹里桃花间杏花,青山深处野人家。名场利路都无梦,閒与东风领物华。竹里潘希曾介绍潘希曾,浙江金华人。弘治十五年(150……游万杉寺起个诗意的名字明代陈子升拄著茶枝杖,龙钟入万杉。石欹泉自咽,山午日教衔。竹箸挑中饭,棕鞋下半岩。老师浑坦率,眼见葛藤芟。游万杉寺陈子升介绍(……
<<<<<<>>>>>>
越来越多的人将丧失思考力童话的世界都是骗人的,科幻世界里都是真实的。虽然意识到人工智能早晚回来,但确实也没想到来得这么快,并且在亲身体验了它(其实这里真想用他或她)的能力后,真是有兴奋,有惊讶,有憧憬……补脾一绝归脾汤,养生一定要知道中医中有一种理论认为,脾为后天之本,所以补脾是身体营养的关键。今天我们就说说补脾的重要性。脾是重要的淋巴器官,有造血、滤血、清除衰老血细胞及参与免疫反应等功能。因其含血量……5岁男孩硬生生被喂成脾衰竭,老人原本是好心,其实是在害娃今天看到一则新闻,5岁的小男孩出现脾衰竭,由于孩子脾胃不舒服前往医院就医,这让很多人感到不可思议,到底是怎么回事呢?后来得知,小男孩的父母长期在外工作,孩子由爷爷奶奶照看……高清大屏麒麟芯片鸿蒙OS2,华为智能平板价格亲民,949元起说起智能平板,相信有很多人想到的都是苹果推出的ipad,确实在智能平板领域,ipad的确占有一席之地。首先ipad的起步就早,它是由苹果CEO乔布斯在2010年推出的平板电脑,……贵州人的酸和辣贵州大方皱皮辣椒说到吃辣,中国南方的江西,湖南,贵州,四川,云南都能吃辣。俗话说:湖南人不怕辣,四川人辣不怕,贵州人怕不辣,不知从什么时候开始,各种旅游书籍,旅游博主把贵……房价不会再涨学区房将成为历史,全国房地产会进入均衡发展吗?地产的周期相对于其他行业来说要长很多,地产一般能横穿23轮股市的牛熊。2个大宗周期现在的房子重点是地段,优选一线城市交通便利,医药卫生教育商业体的优质房源未来的房子还是地……iPhone14Pro已有传言,5种屏幕形态受到讨论,你喜欢就在最近,有关于iPhone14Pro的消息已经在国外论坛上出现了,大家主要讨论的话题就是iPhone14Pro的外形了。这些脑洞大开的国外网友到底都搜罗了外形方面的哪些设计呢……品一阕清丽的秋词写在秋去之际作者笨犬光阴总是那么任性,根本不理会疫情的肆虐,我行我素地漫步在秋的阡陌;时光总是如白驹过隙,不容我们细细打量,就随轻风远去,成为眸光中的一丝怀想。站在冬的门槛回望……原神公子核心技能及配队养成,了解后应该就知道要不要抽了各位玩家大家好,欢迎来到游视姬!这里提供原神最新的前瞻资讯及玩法攻略,感谢您的关注!原神3。2下半版本公子达达利亚复刻,公子作为一个早期角色,在当前的版本还要不要抽取,很……科学家发现百慕大三角残骸,揭开世纪谜题百慕大三角探究不为人知的秘密。百慕大三角位于北大西洋,北起百慕大群岛、南到、波多黎各岛,西至美国佛罗里达州,三个地方围成的海域面积达116万平方公里,相当于日本面积的三倍……压垮孩子的最后一根稻草,捏在父母的掌心日本作家伊坂幸太郎在《一首小夜曲》中提到:一想到为人父母,居然不用经过考试,就觉得真是太可怕了。是的,不是每一个父母,都对得起孩子的一声:爸爸妈妈。而不及格的……死亡是什么?死亡是什么,就像水消失在水里。许久不曾有打开记事本写些什么的冲动了,虽然,最近经历了很多。但这无意间窥到的开头一句却让我思绪有了些许沸腾?未知生焉知死形如槁木,心若……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网