专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

WebRTC简单入门与实践

  一、前言
  WebRTC技术已经广泛在各个行业及场景中被应用,但对多数开发者来说,实时音视频及相关技术却是比较不常接触到的。
  做为一名Web开发者,WebRTC这块的概念着实花了不少时间才搞明白,一是WebRTC本身有较多的独有概念,二是虽然带Web字样,但依赖底层概念和网络却是Web开发很少接触到的;
  本篇文章以0经验音视频开发者视角,类比常用的Web技术,期望帮助您简单入门WebRTC技术,耐心看完本篇文章,你将:了解什么是WebRTC掌握WebRTC通话原理利用ChromedebugWebRTC应用
  适合阅读对象:Web开发,有js基础,对WebRTC感兴趣的同学二、使用示例
  没有接触过WebRTC技术的同学,可以先体验下ZEGO的GoEnjoy产品,里面包含了WebRTC在浏览器中的标准使用方案,包括不限于:设备检测、兼容性检测、弱网断网应对策略等,应用是免费的,可戳示例Demo传送门
  在进入正文之前,让我们先对它有个基本的印象吧!
  三、简单介绍
  体验完Demo后,有必要再了解一下技术的发展历史、应用场景等,这些能让我们知道它为什么优秀,哪方面优秀,有哪些缺点等。
  程序员经常用到5W1H分析法,那么本文就按照这个思路给大家做一下介绍:
  What
  WebRTC(WebRealTimeCommunication),一个可以让用户用自己流量实现音视频实时通信的框架(APIs),支持浏览器(Firefox、Chrome、safari)以及iOS、Android原生系统。
  When
  2017年12月成为W3C草案,国内微信浏览器19年下半年才支持,国内手机自带浏览器目前还有不少兼容问题,2021年1月26日,成为W3C正式标准。
  Who
  2011年Google收购多个子项目(GIPS,On2,VPx),成立了现在的WebRTC项目,目前是Google的一个开源项目。
  Where
  可应用在社交娱乐教育工具等需要实时音视频高效沟通的场景,例如:最近很火的元宇宙。
  Why
  W3C标准,开源,插件化,整体效果佳。
  How
  也是本文重中之中,最终的目的也是让大家能知道如何使用。
  在正式代码讲解之前,有一些概念需要先普及一下(您也可以先看完代码后,再回来看这个段落,加深理解。):
  MediaStream:流媒体对象,音视频数据的一种封装格式,挂载到video或audio标签上播放;
  RTCPeerConnection:会话控制,网络和媒体信息收发,作用类似http对象;
  SDP:主要用于两个会话实体之间的媒体协商,作用类似http中的配置项。
  结合下图类比会更容易理解:
  四、前置思考问题
  在讲解代码前,还需要思考以下几个问题,否则会不清楚为什么代码中需要交换SDP,cadidate等(您也可以先看完代码后,再回来看这个段落,加深理解)。
  【更多音视频学习资料,点击链接Q链接免费领取,先码住不迷路】
  双方使用浏览器通信,浏览器能力,网络情况等不一致会对通信有很大影响,一起思考下下面2个问题:1、视频编码能力不一样?
  peerA和peerB是视频互动的两边浏览器,他们通讯前必须在视频编码能力上先达成一致,如下图,最终协商出共同的H264,如果无法达成一致,则通讯失败。
  2。电脑之间,大多数是在某个局域网中,需要NAT(NetworkAddressTranslation,网络地址转换),因此并不能直接通信
  显示情况如下图:
  通俗一点比喻:阿宅今年30了(不是我,不要乱猜)被父母逼婚,他只能求助媒婆,才可能被另一个阿宅认识。
  媒婆解决阿宅社恐问题,NAT也需要一种方式绕过,双方才能建立通信,我们需要用到STUN和TURN。五、代码讲解
  终于到我们的代码讲解部分了,下面的代码会按照推流段顺序,分阶段讲解每个步骤所需要用到的API(如果你是直接看代码,建议看完后再回去看第三、四Part的介绍,理解会更加深刻)。
  步骤一:创建数据源
  localStream作为发送端本地预览画面:创建数据源constlocalStreamawaitnavigator。mediaDevices。getUserMedia({video:true,audio:true,});显示数据源,localVideo是html中的video标签localVideo。srcObjectlocalStream;
  步骤二:创建发送数据实例
  用于发送步骤一中创建的数据:本地实例constpc1newRTCPeerConnection();对端实例constpc2newRTCPeerConnection();
  步骤三:配置实例
  做这一步的目的是为了交换两端的信息:icecandidate和SDP
  icecandidate:包含通信协议(TCPUDP)和通信IP,STUN和TURN协议中描述网络信息的格式规范,解决双方网络链接问题;
  SDP:浏览器能力,包括不限于音视频编码格式,带宽,流控策略等;解决前置思考中,双方能力不匹配问题,通过交换双方SDP浏览器会自动选择双方都支持的视频编码格式。告诉对端,本端地址pc1。addEventListener(icecandidate,async(e){发送给对端对端添加本端地址if(e。candidate){awaitpc2。addIceCandidate(e。candidate);}});pc2。addEventListener(icecandidate,async(e){发送给本端本端添加对端地址if(e。candidate){awaitpc1。addIceCandidate(e。candidate);}});创建本端SDP,告诉本端浏览器支持哪些能力constofferawaitpc1。createOffer();pc1。setLocalDescription(offer);创建远端SDP,告诉远端浏览器支持哪些能力constanswerawaitpc2。createAnswer();pc2。setLocalDescription(answer);发送远端SDP给本端接收远端sdp,告诉远端浏览器支持哪些能力pc1。setRemoteDescription(answer);接收客户端sdp,告诉远端浏览器支持哪些能力pc2。setRemoteDescription(offer);
  步骤四:发送数据localStream。getTracks()。forEach((track)pc1。addTrack(track,localStream));
  【更多音视频学习资料,点击链接Q链接免费领取,先码住不迷路】
  步骤五:完整精简版Typescript代码
  注意,这里使用的typescript编写,实际运行需要先转成js。constpc1newRTCPeerConnection();pc1。addEventListener(icecandidate,async(e){if(e。candidate){awaitpc2。addIceCandidate(e。candidate);}});pc1。addEventListener(iceconnectionstatechange,(e){console。log(pc1:iceconnectionstatechange,e);});constpc2newRTCPeerConnection();pc2。addEventListener(icecandidate,async(e){if(e。candidate){awaitpc1。addIceCandidate(e。candidate);}});pc2。addEventListener(iceconnectionstatechange,(e){console。log(pc2:iceconnectionstatechange,e);});pc2。addEventListener(track,(e){if(e。streams。length0){remoteVideo。srcObjecte。streams〔0〕;}});constremoteVideodocument。querySelector(remoteVideo)asHTMLVideoElement;constlocalVideodocument。querySelector(localVideo)asHTMLVideoElement;asyncfunctionpushStream(answer:RTCSessionDescriptionInit){pc1。setRemoteDescription(answer);}asyncfunctionpullStream(offer:RTCSessionDescriptionInit):Promisevoid{pc2。setRemoteDescription(offer);constanswerawaitpc2。createAnswer();pc2。setLocalDescription(answer);console。warn(answer,answer);pushStream(answer);}window。onloadasync(){constlocalStreamawaitnavigator。mediaDevices。getUserMedia({video:true,audio:true,});localVideo。srcObjectlocalStream;localStream。getTracks()。forEach((track)pc1。addTrack(track,localStream));constofferawaitpc1。createOffer();pc1。setLocalDescription(offer);console。warn(pc1offer,offer);pullStream(offer);};六、应用举例
  学习完理论知识,接下来我们一起再实践下,加深对知识的理解通过Chrome浏览器debugWebRTC应用。学会debug既可以加深理解,也是后续写代码必不可少的技能,千万不少跳过这一步哦:
  1、点击打开示例DEMO
  2、另打开一个tab页面,输入:chrome:webrtcinternals
  3、DEMO中输入相关信息开始直播,切回到2中的tab页面,如下图:
  蓝色部分:对应的是代码中SDP的处理过程
  绿色部分:对应的是网络链接情况
  4、继续下来,可以看到推流中实时数据变化:
  蓝色部分:拉流实时数据,包括分辨率,码率,丢包率等
  绿色部分:推流实时数据,包括分辨率,码率,丢包率等
  更多字段理解,可戳这里进行深入学习:IdentifiersforWebRTCsStatisticsAPI七、结尾
  随着硬件网络的更新换代,我们经历了由文字图片视频载体变更的过程。随着5G的普及,音视频技术融于无形正在成为现实,WebRTC作为其中最重要框架之一,浏览器的支持成熟度也在快速完善当中
  版权声明:本文为CSDN博主ZEGO即构科技的原创文章,遵循CC4。0BYSA版权协议,转载请附上原文出处链接及本声明。
  原文链接:https:blog。csdn。netzego0616articledetails123420765
  程序员音视频开发WebRTC

车辆购置税怎么计算?100万的进口车,为啥可以卖到300万?导语车辆购置税怎么计算?车辆购置税计税价格税率。计税价格很好理解,就是车辆的售价。比方说,一辆车不含税的裸价是180000,那么在计算车辆购置税时,计税价格就是180000。而对于神童何宜德5岁开飞机,8岁上大学,13岁拿下博士录取通知书1岁徒步暴走3岁雪地裸跑4岁开船5岁开飞机6岁写自传8岁考大学13岁硕士研究生毕业,同时拿下博士录取通知书。这逆天的履历,真是让人开了眼。眼前的这位神童叫何宜德,自出生以来,就在不人生波动MarkYaya三搭泰剧直到我们相爱MarkPrin分享求婚细节人生波动夫妇Mark与Yaya再度合作最新泰剧直到我们彼此相爱泰国Raklakorn公司制作出品,泰国三台浪漫轻喜剧泰剧直到我们彼此相爱(JonKwaJaDaiRukGun)Lov地心护核者现已引入专用服务器,首次披露更新沉没之海细节Pugstorm和FireshineGames很高兴地宣布,地心护核者的新补丁已经推出,为这款热门的18人采矿沙盒冒险游戏引入官方专用服务器支持。从今天起,地心护核者的玩家将可以选福建最有名的八道菜,尽显山海风味,网友闽南菜果然有一手本期导读朋友们,大家好。在之前几期中,我们陆续写了八大菜系中的鲁菜,川菜,湘菜,东北菜等,那么今天我们就来聊聊闽南菜。闽南菜和其它菜系略有不同,它更注重变化,中西合璧,酸甜可口。说过气老艺人窘况县城演出直播被嘲烂片圈里打转,晚节是啥?娱乐圈收入高,早已是人所共知的事。但老演员杨昆却在直播中表示演员也缺钱,称自己每月只有2500元社保。加上年龄大了能接到的戏不多,所以不得不通过直播带货来填补一下。对于杨昆的说法,从小山村到国际大舞台在时代洪流中踔厉奋发青春如初春之萌动,如朝日之喷薄,如百卉之含苞。时代各有不同,青春一脉相承。在竞技场上,有这样一群年轻人,他们敢想敢做,敢打敢拼,勇往直前,用奋勇争先在人生赛道上书写着华彩篇章。前不张天爱参加浪姐3,徐开骋为其打call,两人悄悄谈了3年?浪姐3终于官宣了,又到了各路朋友纷纷下场打call的时候,没想到啊没想到,徐开骋竟然给张天爱摇旗呐喊了。别说,这口号还挺甜,乘风破浪张天爱,人见人爱张天爱,坐等播出张天爱。网友都疯被假精致掏空的年轻人很多年轻人确实假精致,我也看不惯。比如我的大学好友,工作两年换了三台车。按理说他家里条件很一般,根本没必要开这么好的车。但是他还是贷款买了。是不是假精致?当然是。于是我问他,他说他年轻人真的是房地产的掘墓人吗?为什么会这么认为呢?现在不管做什么行业,都不好做,特别是房地产行业的,特别的不好做,近几年更加惨不忍睹,在疫情来了之后,很多人都面临了失业,房子也买不起,不过买不起房子的都是老一辈的人,不代表着这一代78岁大妈哭诉每月7千退休金,可是我却想早点去世,真的太累了导语在大众的普遍观念里,晚年只要有好的经济条件。那么晚年就完全没有烦恼,一切问题都能用钱解决。那些退休金高的老人简直就是过神仙般的日子。既不用工作,还有那么多钱够花。但是真实情况真
林海响彻乌江岸金秋十月,乌江之畔,青山苍翠,绿水环绕,宛如天然山水画卷。一大早,沿河自治县黑水镇大山村护林员田世毫走出家门,来到森林防火执勤点,对过往车辆和人员进行登记劝导,严禁携带火种进山入林珠海航展下周举行,交警发布出行提醒!自驾小车禁入核心区域南都记者获悉,第十四届中国国际航空航天博览会将于11月8日至11月13日在珠海举行。珠海交警提醒,为了从源头上削减车流,避免交通拥堵,本届航展实施公交集约观展,自驾小车禁止进入航展湿地之美丨甘南玛曲湿地这是玛曲县阿万仓湿地秋景(2022年9月21日摄,无人机照片)。玛曲在藏语中是黄河的意思。甘肃省甘南藏族自治州玛曲县是黄河上游重要的水源涵养区和补给区。黄河在玛曲段注水增流量占黄河这么近那么美周末到河北(124)丨博古览今,开启穿越时光之旅这么近那么美周末到河北大美秦皇岛奋进新时代奋进新时代美丽石家庄第十三届中国艺术节奋进新时代魅力张家口战国时的透雕龙凤纹铜铺首西汉时的长信宫灯和金缕玉衣五代时的彩绘散乐浮雕每一件文物品川菜喝雅茶看熊猫第五届世界川菜大会在雅安开幕如何记住一座城市,自然是从美食开始。11月3日,由雅安市人民政府世界中餐业联合会共同举办的第五届世界川菜大会在雅安正式开幕。展区大会秉承世界的川菜雅安的盛会群众的节日办会宗旨,以提印度吊桥坍塌事故一个旅游景点吊桥如何瞬间成为死亡之桥印度西部古吉拉特邦一条很受欢迎的人行桥发生坍塌造成大量游客掉入河中的事故发生后,各方仍在追问各种问题。周日(10月30日)晚上发生在小镇莫尔比的这一起惨剧是印度多年来最严重的悲剧事东鹏控股与欧瑞博达成战略合作,共同推进智能家居发展智能制造行业属于中国制造2025的重点发展行业,加快发展智能制造,是培育我国经济增长新动能的必由之路,对于推动我国制造业供给侧结构性改革,打造我国制造业竞争新优势,实现制造强国具有诺基亚2780Flip翻盖手机发布支持可拆卸电池,售价658元11月3日消息,近日诺基亚官方商城上架了一块翻盖功能机,名为Nokia2780Flip,虽然名为Flip,但是实际上却是一台翻盖手机。Nokia2780Flip搭载了一块2。7英寸EDA破局!芯片设计携手国产操作系统蹚出突破口世界多极化的大趋势下,合作和竞争是当前世界形势的主流,而在核心的科技领域,合作固然存在,但竞争也是广泛存在的。以芯片产业为例,国产芯片要走出被卡脖子的困局,在国际竞争中占有一席之地真实选车经历,最终选择了AIONVPlus从决定买新能源车到入手,大概用了34周的时间,先在各种论坛对比不同品牌的口碑和价格,目标预算1522万,因为感觉传统车企的实力和保障更放心,先排除了新势力车企,确定了目标品牌比亚迪LG发布全新32SQ780S智能显示器配备Ergo支架,内置娱乐功能LG发布全新32SQ780S智能显示器,可以运行webOS22,无需连接电脑或其他设备,也能实现远程工作站家庭锻炼游戏和各种娱乐应用,从而丰富家庭娱乐生活。结合其内置功能和符合人体
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网