http://www.ox-holdings.com

对分析的用户真正真实场景遇到的问题非常重要,早期只是使用在一些较为简单的网页和网络请求上

摘要2018年度RTC实时互联网大会已于9月7、8两日在北京喜来登长城饭店顺利举行,本次大会精彩纷呈。引言话说,这种变化似乎就发生在一夜之间……从跨国VoIP电话到连麦互动以及实时音视频通话;从直播答题撒币到传统电商都可以实时在线抓娃娃;将“新鲜”趁热打铁,火的不要不要的微信官方小程序也赶趟儿宣布开放了实时音视频通信接口;就连人们熟知的教育、互联网金融、安防以及企业通信,也都纷纷对实时互动场景抛出了绣球,开展了“联姻”……“实时”两个字满屏飞,背后呢?这些让人感觉颇为新奇的“变化”统统都要归功于RTC技术。RTC,如今人们经常说到的实时通信技术,从传统互联网过渡到移动互联网的过程中,在很多领域都有广泛应用。如今开发者们完全可以通过各种实时通信API集成RTC云服务能力,在各种原生应用、Web网页、H5、硬件设备中加入实时通信功能,而WebRTC被称为网络实时通信,是 RTC子模块之一,被日渐重视。相关数据显示,每周仅在Chrome浏览器上就会有超过15亿分钟的WebRTC音视频通话。依照目前的统计,有超过1,300个从事WebRTC的公司和项目。浏览器在日常生活中如此常见,据悉所有安装的浏览器中就会有80%已经内置了WebRTC。应用频率如此之高,可见其技术发展日渐成熟。在此基础上,WebRTC1.0候选推荐标准也于去年正式被“呼出”。可能出现的标准“新探”都在这里基于此,在RTC2018大会上,WebRTC标准委员会委员Daniel C. Burnett 为与会开发者们详细介绍了该标准实施之后所开展的各项工作。他表示,其实在核心规范层面的变化是比较少的,说到发展,绝大多数是针对部分规范增强的“加码”!通常来说,人们都比较注重安全问题,当然WebRTC也不例外。为防止信息泄露,通常都会对RPT的流量进行加密。背后的理念就是加密捕获的媒体,必须要有指定个人进行解密,而且需要登陆之后才可以做到,这点是需要额外注意的特殊功能之一。进一步来说,WebRTC对于浏览器,一旦接触到媒体就会产生编码,可以使用任何想要的编码器进行解码工作,在这方面的拓展主要集中在让开发者可以使用java进行解密或者加密,从而对编码参数的控制更加有力。基于这个新功能,WebRTC达到的效果是可以做到不需要经常打开浏览器的窗口。这究竟有何好处呢?可以妥妥解决临时进入的电话接听问题。“这个功能十分适合视频,过程中不需要经常打开浏览器窗口;而且还对背景语音的处理十分有效,尤其是语音识别方面。”Dan Burnett 补充道。WebRTC标准委员会成员 Daniel C. Burnett此外,关于SVC的controls的性能加持也十分重要。具体来说, Daniel C. Burnett 阐释道,本质上是一个可扩展的视频编码,具备后就可以在时间与空间上进行压缩,其中时间压缩能以比较慢的速率发送帧,比较高的速率插入可选的额外帧,类似于大家喜欢的联播。其中空间压缩和时间压缩非常类似,能够发送低分辨率的帧,可以插入可扩展分辨率额外的帧等,所以可以采用比较低分辨率的帧。“目前,我们正在设计一个加速 TLS以及HTTP新传送,这是受到WebRTC开发经验和教训的启发。这点Google非常支持我们,之前在quick领域做得很多开发实践都是基于WebRTC之前的经验和教训,如今可能涉及到不同的连接设置中往返需要时间这样类型的探索。”他说。众所周知,让互联网更快的路就是通往QUIC的这一条。 Daniel C. Burnett也提出,quic流的数据通道作为大家都非常喜欢的概念,尤其是使用quic流的数据通道,在Java的语言下比较简单。如果具体说说QUIC这条“捷径”,腾讯TEG基础架构部高级架构师罗成,曾在公开场合表示,其实QUIC的设计目的是为了减少传输延时。为何TA能够有效减少传输延迟呢?主要还是由于几方面特性。罗成认为,首先能够帮助0RTT建立连接,其次可以做到全用户态传输控制。一般来说,TCP的运算控制都是基于内核操作系统协议站实现的,如果要在其中完成一些优化改进甚至监控部署都需要涉及到服务器操作系统的修改甚至客户端操作系统的修改,通常是不可能的,这个特性的部署升级压力非常大,但是QUIC不一样,是全用户态实现,可以非常精准地实现特性。此外,QUIC可以避免队头阻塞的多路复用。由于QUIC请求和请求之间都是完全独立的,一个请求丢包只会影响“眼下”关联的一个请求,不会影响别的。相比之下,TCP不知道对应了多少个请求,如果产生丢包现象,也就不知道剩下等待请求的数量,自然就会产生队头阻塞。这么看,QUIC被高效利用“有情可原”,同样对其深入研究的新浪微博技术专家聂永则表示,其实QUIC还涉及到一个前期筛选的过程。他介绍说,选用QUIC还需要从自身出发,注意很多实验机制、方案以及框架。“当时我们都在选择的过程中,出现了go-quic,由于用户不活跃就被排除了;另外一个就是谷歌的QUIC,想把它转换成生产级的发现则需要很大的努力,更重要的一点它是使用C++语言写的,因为我本身不会C++,所以就没选择它;一轮选择之后,我们发现Caddy+QUIC可以提供一站式网络堆栈服务,方便成熟且使用者众多,更新机制频繁。”聂永补充道。尽管QUIC有这样那样的优势,但长期实践表明,对于企业来说采用之后还是存在一定的困难,例如首当其冲的表现就是协议复杂性。由于未来需要实现TCP的可靠性、拥塞控制、流量控制以及安全的指标,所以必然会出现QUIC协议被陆续替换并趋于标准化的情况。最重要的一点,技术的快速变化以及协议的快速迭代,差不多一个半月就有一个新的QUIC版本出现。QUIC现默认使用自己实现的握手协议,但后续计划使用TLS1.3替代,这就增加了自己架构的难度,关于这个问题,聂永提出借助开源的想法,如果在工具层面可以实现就减轻了“重复造轮子”的负担。至此,我们不得不正视一个问题,如今整个社会还没有为QUIC的到来做好准备,运营商针对UDP的支持也是不足的,表现不稳定。例如,有些ISP会直接屏蔽UDP,UDP有时需要被伪装成TCP才能正常传输,UDP带宽有时相比TCP狭窄,UDP流量可能会因QOS线速判定为丢包……此外,QUIC穿透性差,NAT局域网路、交换机、防火墙等会禁止UDP 443同行,防火墙有时只“认可”TCP……相对来说,实验室数据还是比真实环境测评出来的数据漂亮很多,这一点需要企业在使用QUIC时多加注意。会上,Dan Burnett还提到了解决NAT的问题的ICE。通常,如果想从一个网络转换到另一个网络,就算使用的是移动终端,无线转换也非常耗费时间的,过程需要重新打包甚至还会出现丢包现象,所以ICE的使用过程中充满挑战。此外还有一点,对于很多开发商来说不希望使用SDP是共同的“夙愿”。如何在使用ICE的同时不用SDP,其实还存在其他的运输途径,例如quic。由于ICE想控制的是用户能够使用哪个地址的问题,包括APP地址以及其他,完成这些最重要的依旧是对速度的极致要求。“WebRTC1.0版本现在运转得非常好,相信未来会越来越好,据了解已经有APP在使用WebRTC1.0版本。但值得注意的一点,如今WebRTC是一个平台,而且会不断延伸,衍生平台或产品未来会更加亮眼,越发被注意。”你理解最新的标准测试“那些事儿”吗?标准呼出之后自然要观察适用效果,GoogleWebRTC产品经理HuibKleinhout对此深受感触。他表示,关于WebRTC的1.0版本,标准在实践中加以测试很重要,可以借此判断任何时间条件下标准是否适用。说到WebRTC的测试,据悉这与其他的网络标准并不相同。例如,Google之间有一个kite,可以将两个浏览器进行连接,浏览器可以进入机器,也可以在原端,还可以是物理的硬件,而且能够把测试结果报告给安卓等,这样两个服务器就做到直接对话了。更重要的一点,这种测试不单单针对标准的适用性,还能够测试基于WebRTC的应用。Google WebRTC产品经理 Huib KleinhouHuib Kleinhou认为,WebRTC在开始阶段与现在的1.0版本有非常大区别,包括Google、chrome等都做了大量的工作。例如,关于chrome,加入一些API,避免直接使用SDP;调整到另外一个SDP,让浏览器会更加具有一致性。反观浏览器的性能提升,例如chrome和safari,要保障它们更好的符合标准要求,同时又有一定的灵活性。未来对于Edge有需要进行更多提升,因为基于WebRTC以及API需要开展越来越多的工作。“我们的方向非常好,希望在未来将这个应用进一步改善和提升。”Huib Kleinhou说。此外,关于WebRTC的1.0版本,还需要考虑其稳定性以及可靠性。其中一个非常重要的修订是MacAudio,主要针对解决MacOS之前出现的相关问题;另外就是关于chrome的屏幕共享。通常,我们与其他人进行平台共享时,不是带宽不够就是干脆没有网络,屏幕延迟以及死机都是常有的事儿。关于这方面,Google团队做了一定改进并保证更好的自动化,尽管效果不够完美,但针对相关问题总结后会有进一步提升。“坑坑洼洼”的规模商用尚待成熟话说,标准有了,测试做了,似乎说着说着还要落地到应用实践的层面。聊到这里,可能不少开发者有这样的想法。WebRTC并不算一个特别新的概念,就连1.0说话也就落地了,如今构建很多不同领域的应用,例如视频通话、远程医疗等,开发者们第一时间也可以想到WebRTC,证明这个普及程度还是十分令人欣喜额,此外关于一些to C产品的应用,例如Facebook message等,如此推测大规模商用的门槛高不高呢?对此,声网Agora首席WebRTC架构师陈功在演讲“WebRTC在大规模的商业应用中的实践”中提出,其实从WebRTC到大规模的商用,还是会遇到非常棘手的问题。首先可能就是通信质量的“那些事儿”。陈功表示,真正商用的场景中不可避免会有多人的场景,这就需要有一个KOS的优化策略。如果过程中所面向的用户客户是全球分布的,更需要智能路由以及全球化的部署服务节点的能力。除了质量之外,在可用性方面,全球化部署的服务节点必然需要高可用的运维,同时服务的终端不会是单纯的PC端浏览器, 这么看还要有跨平台互通的,包括与移动端、其他第三方接入的互通能力。关于以上这些问题的解决,从服务架构出发,陈功介绍,WebRTC协议站开发了WebRTC的Gateway网关,这个网关会负责浏览器端的Web用户和Agora大网进行接入,同时还负责一些频道的创建、媒体流的发布、媒体流的订阅、消息的传递和状态反馈,整个网关是一个就近接入的分布式部署,充分利用了Agora传输网络的优势,因为WebRTC本身是点对点的。“另外,由于整个服务体系中非常重要的就是数据驱动,从数据方面可以看到大体可以分成三部分。”他总结道。第一部分是在媒体服务器上或WebRTC网关上能看到的采集到的数据,包括延时、抖动、丢包,还包括网关和SD-RTN TM之间的传输状态。端上最重要的就是pc.getStats,会挑选其中大多数比较有意义的进行采集,包括非常重要的带宽估计、关键帧请求等信息。最后的数据是SDK的logger,对分析的用户真正真实场景遇到的问题非常重要。应用落地始终是打开大规模商用的第一步,所以针对不同场景的优化体验,声网把WebRTC用到大规模的商用要服务于不同垂直领域的客户,区分一些场景。例如,直播场景就比较要求高清的画质,通信场景的重要指标就是流畅性,所以针对这些不同的场景像采用编码选择参数的设置、传输策略上进行根据场景的定制等。此外,关于WebRTC前端应用中的经验和教训,TutorABC的资深架构师孙高朝列举了在线课堂系统中经常出现的问题,例如学生反映怎么看不到顾问,也听不到声音;顾问也反映听不到学生声音,看不到自己的影像。孙高朝对与会开发者们表示,总结之后发现上述这几类问题,基本上归功于设备问题和网络问题,其中设备问题占了绝大部分。通常提及的GetUserMedia并不能算真正的设备问题,只是调用这个函数会出现报错,这可能与设备相关;另外的设备异常就属于物理硬件上的异常。“关于WebRTC文档上的关键事件,我们都会给予一定容错,甚至有时候要多个接口一起协同使用,而不是对单一的接口做一些判断,往往会存在不精准的现象。WebRTC的信令协商非常重要,取决于WebRTC网络连接或其他东西能不能正常使用,所以网络层的处理要格外精细,要考虑到丢包以及重连。”他说。总体来说WebRTC文档可以参考,应用过程中需要因地制宜,还是需要根据自己的业务需求发现其中的问题做一些解决。那些典型的实时场景与后端架构,TA们都是咋做的?概括了应用层面的弯与坑之后,大家都知道,HQ Trivia直播答题掀起了今年一波实时热潮,但瞬间高并发的特点给系统架构提出了“新难题”。具体来说,在高并发场景下的实时状态同步,包括PK、答题、或者大型直播间等,在消息丢失、消息延迟情况下如何做到消息实时状态的同步呢?关于这个问题,李庆寿似乎最有发言权,花椒直播在产品中的技术实践更是值得探讨。通常来说,答题、连麦以及直播间的PK 活动都有可能带来长连接的不稳定性。试想瞬间增加服务器压力,处理能力有限导致数据丢失延迟等情况出现,由此出现长连接异常,用户体验自然不高。此外据了解,长连接的固有性质导致丢失或者乱序,开启实时消息控制会导致它更加严重。此外,长连接超时状态的判别延迟,其中超时比http这种接口请求的超时长得多,出现网络问题时不可能立马断线连接、重新建连,所以就出现了消息丢失和延迟问题。“我们当时考虑两个方案,首先转成IM消息,写扩散,进行消息编号等功能。但这个功能评估下来对系统的改造非常大;另外就是定时拉取接口做实时状态的同步,这个方案导致状态接口的请求量非常大。所以最后根据这个思路设计了Sync服务。”李庆寿说。具体操作第一步就是要增加ID的版本号,将Sync消息写入现成连系统中,由长连系统推送到APP端,与此同时将带有版本号的信息同步写入到Sync中去。作为APP端,要不就是网络特别好而且消息不是很多的情况下,正常接受消息可以展示出来;如果此时APP处于网络不稳定或者直播间消息众多,那就轮到Sync服务发挥作用了。具体来说,APP会寻找Sync服务的相关接口,如果版本号大于本地的最大版本号,就会用这个版本信息做业务处理。直播环节看似没有坑了,那点播如何才能做的顺当?沪江CCtalk CTO 杨继珩为现场开发者建议的解决方案是OCS。这套系统是一套播放系统,可以理解为一个播放器,但它播的内容不像其他机构播一个视频那么简单。作为一个富媒体播放器,就是把上课所有元素按直播时一个个放完,机制很复杂,但可以让录播用户得到更好的体验和学习效果更好。OCS的结构也很复杂,包括OCS的后台生成器、平台服务层的转码、打包、数据切片、富媒体包装等。未来关于在线视频教育的挑战,杨继珩认为这几点比较关键,给同行人带来些许建议。卡顿、低延迟优化的老生常谈的话题之一;此外,一些大型课程学生在场率超过50%的并没有很多,很多用户都是看录播,所以要保证MCU录制质量一定要高,这方面能力的建设以及稳定性比较重要。如今,8亿-9亿网民中有超过六成的使用者或多或少玩过游戏,尽管从国家层面对其进行了相对严格的管控,但体量巨大带来的影响仍然是不容小觑。更重要的一点,游戏对网络要求非常高。不像视频或其他电商类业务对网络的带宽、时延、抖动、丢包要求极致;常常玩FPS游戏的人们了解,如果网络不好的话基本没办法进行下去,客户体验会非常差,再加上如今公有云的网络基础设施还相对薄弱,这也是华为云游戏解决方案架构师王冰关注游戏网络质量优化的立足点。王冰表示,将数据采集完成进行分析、网络预测,去动态调整网络流量流向等环节确实很关键,但更重要的一点,还是要对网络质量整体提升。“网络出问题后,最终要改善网络,而不是总去预防,要总结、分析后对网络能力进行提升。例如可以从数据中心建设、骨干网的带宽和ISP带宽、POP点广泛覆盖、线路质量的提升、跨地域线路容灾能力以及IPV6的快速推广等方面着手。”他说。从技术层面出发,随着RTC技术在更多行业的应用落地,不断迸发出更多创新业务场景,后端架构设计与传输也将时刻面临新的挑战。小到教育画面的卡顿,大到工单以及客户系统的诸多问题, 声网Agora 首席数据架构师何丰作为RTC 大会的老朋友,这次带来了针对“质量透明” 的主题分享。在分享中,何丰强调,需要把服务质量透明给用户,质量透明以后用户可以了解事态;此外可以有效帮助定性是网络问题还是设备陈旧问题,对质量改进形成非常快速的迭代。具体来说,声网关于这方面的实践,主要是通过内部的工具和系统把这些问题定位诊断出来,因为有一套非常完善的质量数据体系。这个数据的体系会从用户通话的每一个环节针对质量收集, 例如用户行为、网络切换、音视频采集、上行网络丢包、抖动、延迟等质量数据。话说,中间的云作为传输大网,能够保障跨州、跨国传输的质量。大网中传输的质量指标、对方用户下行网络、对方接收解码播放渲染的运行状态……这些用户行为都会被全链路收集起来。何丰进一步补充道,这些收集到的数据还可以做些分类,例如用户行为一类,运行时状态为一类,以及QoE和QoS两方面的质量数据等。这代表可以通过全方面数据去判断通话的相关情况,脱离用户访谈就可以对通话质量进行全方位把控。此外,会上Callstack.ioCEO VarunSigh还带来了有关WebRTC领域质量监控和优化的经验分享。如今,实时互联网行业迎来爆发之年,很多创新的实时互动场景在RTC技术的激发下踏上风口,关于RTC 2018大会的相关报道后续会接踵而至,敬请期待。

3.1 HTTP/2 的局限性

    除了 QUIC 是基于 UDP 实现,前面几种协议都是基于 TCP。TCP 因其面向连接、可靠传输等特点而被广泛采用,但在如今带宽越来越大的网络环境下,TCP 的局限性也制约了 HTTP/2 的性能,主要表现为以下两点。

    (1) 数据传输前 TCP 先要进行“三次握手”,建立连接后才开始传输应用数据,这无疑增加了网络延时; 在采用 TLS 协议时需要交换密钥,这又增加了一次往返时延 (Round-Trip Time,RTT)。

    (2) HOL (Head-of-line) blocking,前序包阻塞。TCP 保证有序传输,所以当一个数据包丢失时,其他所有的包都要等它重传整理后才会交给应用层,对于多路复用共享一个 TCP 连接的 SPDY 和 HTTP/2 来说,这无疑影响更大。

2)关于WebRTC:《开源实时音视频技术WebRTC的现状》、《简述开源实时音视频技术WebRTC的优缺点》、《访谈WebRTC标准之父:WebRTC的过去、现在和未来》;

原生 APP 有个天然的好处,它是直接和操作系统打交道的,操作系统开放的资源和能力它都可以直接用,比如说音视频的采集渲染,还有网络的输入输出。套用一句时髦的广告语:“没有中间商赚差价”,直接和操作系统对接,可以获得比较好的用户体验。

如上图所示,实现逻辑中有三个关键点:

2. HTTP 及 SPDY

从网络架构上来讲,网游可分为:

1)没有开放前处理接口,美颜和挂件这些模块没办法接入第三方的或者自研方案;

2)媒体服务器后端没有实现,开发者要实现媒体服务器,然后通过开源 WebRTC 网关(比如说 janus)接入;

3)编解码器、抖动缓冲和语音前处理 3A 等能力只能依靠 WebRTC,不能自行定制化;

4)部分主流浏览器是不支持 WebRTC 的,特别是苹果的浏览器。虽然说去年苹果宣布支持 WebRTC, 但是目前 iOS Safari 最新版本对 WebRTC 的支持并不好,iOS Safari 的主流版本并不支持 WebRTC,在 iOS 上面微信浏览器也是不支持 WebRTC 的。

声网小程序体验 Demo 已经上线,欢迎大家扫描下方二维码体验!我们将稍后在Github为大家提供源码。

2.1 HTTP 1.x

    HTTP/0.9 是一个过时的协议,它只接受 GET 一种请求方法,没有在网络传输中指定版本号,且不支持请求头。由于该版本不支持 POST 方法,因此客户端无法向服务器传递太多信息。

    随后提出的 HTTP/1.0 是第一个指定版本号的 HTTP 协议版本,早期只是使用在一些较为简单的网页和网络请求上,而今主要是在代理服务器中使用。

    HTTP/1.1 在 1999 年开始广泛应用于现在的各大浏览器网络请求中,同时也是当前使用最为广泛的 HTTP 协议。HTTP/1.1 与 HTTP/1.0 的主要区别为 :

    (1) 缓存处理。在 HTTP/1.0 中主要使用 header 里的 If-Modified-Since, Expires作为缓存判断的标准,HTTP/1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

    (2) 带宽优化及网络连接的使用。HTTP/1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象传过来了,并且不支持断点续传功能,HTTP/1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

    (3) 错误通知的管理。在 HTTP/1.1 中新增了 24 个错误状态响应码,如 409 (Conflict) 表示请求的资源与资源的当前状态发生冲突 ; 410 (Gone) 表示服务器上的某个资源被永久性的删除。

    (4) Host 头处理。在 HTTP/1.0 中认为每台服务器都绑定一个唯一的 IP 地址,因此请求消息中的 URL 并没有传递主机名 (hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个 IP 地址。HTTP/1.1 的请求消息和响应消息都应支持 Host 头域,且请求消息中如果没有 Host 头域会报告一个错误(400 Bad Request)。

    (5) 长连接。HTTP/1.1 支持长连接 (Persistent Connection) 和请求的流水线 (Pipelining) 处理,在一个 TCP 连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和延迟,在 HTTP/1.1 中默认开启 Connection: keep-alive,一定程度上弥补了 HTTP/1.0 每次请求都要创建连接的缺点。

    尽管 HTTP/1.1 相比于 HTTP/1.0 有了很大的优化,但仍存在不少问题。

    (1) 需要很多 TCP 连接来实现并发请求与响应,且在传输数据时每次都需要重新建立连接,这增加了大量的延迟时间并可能引起网络拥塞和高数据包丢失,导致更差的网络性能。

    (2) 在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,这在一定程度上无法保证数据的安全性。

    (3) 头部信息 (header) 里携带的内容过大,在一定程度上增加了传输的成本,并且每次请求 header 基本不怎么变化,尤其在移动端环境下容易增加用户流量。

    (4) 虽然 HTTP/1.1 支持了 keep-alive,来弥补多次创建连接产生的延迟,但是 keep-alive 使用多了同样会给服务端带来大量的性能压力。

    (5) HTTP 请求严格由客户端发起,在网页加载很多嵌入对象时会严重影响性能,因为服务器只能在客户端发出请求后才能传输数据。

线程并发模型是进程模型的改进,线程从属于进程,是系统更小粒度的执行调度单元。不同请求可由进程内多个并发执行的线程来处理,这些线程由操作系统内核自动调度。线程相对进程的主要优势在于,调度上下文切换开销更小,但由于多个线程共享地址空间,需要额外的线程间互斥、同步机制来保证程序性正确性。典型的采用线程模型的服务有Tomcat。

这个方案的基本思路是利用 WebView 的浏览器特点,在 WebView 内使用 WebRTC 的 Web API,从而在小程序上获得实时音视频能力。上图是这个方案的架构图。最底层是微信小程序的基础能力。上一层是 WebView,微信小程序的 WebView 类似浏览器,那么就可能会支持 WebRTC。然而必须要注意到,微信小程序的 WebView 在安卓平台上支持 WebRTC,但在 iOS 平台上面不支持 WebRTC。

  • 线上课堂:1对1、1对多的在线直播课,适用于职业教育、小班教育、学前教育等场景,实现老师、学生实时互动;

  • 视频会议:一秒快速建立多人视频会议,实现高效远程协作;

  • 在线医疗:突破医疗资源的地域限制,以及系统平台限制,实现远程多方视频会诊,降低诊断成本;

  • 在线购物:直播展示商品,同时观众连麦互动,进一步促成交易;

  • VIP 客服:专属视频客服,1对1实时交流;

  • 银行开户:专用网络,无需安装 App,通过小程序快速实现信息认证与视频开户;

  • 远程报警:从微信小程序实现一键报警,迅速连接相关部门,并通过实时视频通信,使警方能实时掌控现场情况。

3 结束语

    QUIC 通过一次 (通信双方从未建立连接) 甚至不需要往返握手就可建立连接,这大大降低了网络传输延迟。同时采用 UDP 底层协议避免了 HTTP/2 基于 TCP 的 HOL (前序包阻塞) 问题。今天,大多数人都会随身带着诸如智能手机等移动设备,在 TCP 中当网络环境发生变化时需要重新分配 IP 地址、建立连接,在未来这显然太慢了。QUIC 通过一个 64 bit 的 GUID (Globally Unique Identifier,全球唯一标识符) 来标记传输包,服务器可以通过它来区分来源端口,并且在QUIC连接断开后不需要往返握手来建立连接。

    所有这些都使 QUIC 有着强大的吸引力和应用前景,或许会在某一天取代 TCP、HTTP,更有可能的是它们互相吸收对方的长处,共同发展。

2)游戏逻辑层;

视频引擎中,包括了 VP8 和 VP9 的视频编解码器,甚至是即将到来的 AV1。视频引擎还包括视频抖动缓冲和图像质量增强等模块。传输引擎,WebRTC 使用的是 SRTP(Secured Realtime Transport Protocol)安全实时传输协议。

声网降低延时的做法是在音视频流经过协议转换后,不通过 CDN 传输,而是通过 Agora 的私有 UDP 协议后,进行低延时的传输。普通的 UDP 建立的是不可靠的传输,因此要进行深度开发来抗丢包,让传输变得可靠。并且,为了保证传输质量,要搭建整套低延时的 UDP 传输网络,有较高的技术和资金门槛。若直接上公网传输,无异于“裸奔”。

3.2 QUIC 的特点

    QUIC 最主要的目标是减小网络传输延迟,所以选择了 UDP 作为传输层协议,它的主要优点有:

    (1) QUIC 协议在创建连接握手时,只需要 1 到 2 个数据包即可。参考 TCP+TLS 协议的传输方式,QUIC 设计了类似 DTLS (Datagram Transport Layer Security,数据报传输安全层)的传输模型。这个模型大大简化了建立连接的过程,使得创建连接握手时只需 1 到 2 个数据包。对于无线网络来说,客户端和服务器之间的延时通常在 100ms 以上。传统 TCP+TLS 协议的传输方式,在创建连接时的4个数据包和QUIC协议的1个数据包相比,连接创建上就会多耗时 300ms 以上。图 2、图 3 分别为 TCP+TLS、QUIC 的握手示意图。

图片 1

    (2) 避免前序包阻塞。SPDY 和 HTTP/2 支持将页面的多个数据(如音频、图片等)通过一个 TCP 连接进行传输。该特性能够加快页面组件的传输速度,但是对于 TCP 协议来说,这会遇到前序包阻塞的问题。因此,即使逻辑上一个 TCP 连接上并行的在进行多路数据传输,其他毫无关联的数据也会因此阻塞。由于 UDP 协议没有严格的顺序,当一个数据包遇到问题需要重传时,只会影响该数据包对应的资源,其他独立的资源(如其他 CSS、JavaScript 文件)不会受到影响。QUIC 协议直接通过底层使用 UDP 协议天然的避免了该问题。

   (3) QUIC协议有一个非常独特的特性,称为向前纠错 (Forward Error Correction,FEC),每个数据包除了它本身的内容之外,还包括了部分其他数据包的数据,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传。向前纠错牺牲了每个数据包可以发送数据的上限,但是减少了因为丢包导致的数据重传,因为数据重传将会消耗更多的时间(包括确认数据包丢失、请求重传、等待新数据包等步骤的时间消耗)。

    (4) 底层协议切换到 UDP 协议之后的另一大好处是,连接不再依赖于来源 IP。对于 TCP 协议来说,标识一个 TCP 连接需要 4 个参数,即来源 IP、来源端口、目的 IP 和目的端口。其中的任一参数改变,TCP 连接就需要重新创建。这对于传统网络来说影响不大,因为来源和目的 IP 相对固定。但是在无线网络中,情况就大不相同了。设备在移动过程中,可能会因为网络切换(如从 WIFI 网络切换到 4G 网络环境),导致 TCP 连接需要重新创建。QUIC 协议使用了 UDP 协议,不再需要这四组参数。同时 QUIC 协议实现了自己的会话标记方式,称为连接 ID。当设备网络环境切换时,连接 ID 不会发生变化,因此无需重新进行握手。该特性除了可以减少无谓的连接重连之外,还可以充分利用设备的不同网络接口,进行资源的并行下载。因为虽然这些网络接口有不同的 IP,但只要他们能够共享连接 ID,就能够并行的从服务器下载数据。

    QUIC 协议内置了 TLS 栈,实现了自己的传输加密层,同时QUIC 还包含了部分 HTTP/2 的实现 , 底层通过 UDP 协议替代了TCP,上层只需要一层用于和远程服务器交互的 HTTP/2 API。这是因为 QUIC 协议已经包含了多路复用和连接管理,HTTP API 只需要完成HTTP协议的解析即可。图 4 为协议层次对比图。

图片 2

题外话:有关高性能网络编程的C10K、C10M话题,请详细阅读以下文章

(本文同步发布于:

微信在去年年底开放了小程序直播接口。小程序从仅适用于阅读、生活服务、工具等应用的流量入口,成为了许多音视频应用的又一个新平台。新功能的开放让更多应用可以利用微信的熟人社交链为应用快速拉新,提供便捷的增值服务,或加速应用变现。我们的客户,荔枝 FM 就在小程序上实现语音社交直播,花椒直播也通过小程序实现直播答题一掷千金的场景。

1. 引言

    建立在 TCP 基础之上的 HTTP 是互联网上应用最为广泛的一种网络协议,诞生之初,主要就是为了将超文本标记语言 (HTML) 文档从 Web 服务器传送到客户端的浏览器。但是到了 Web 2.0 时代,HTML 页面变得越来越复杂,不仅仅单纯的是一些简单的文字和图片,同时有了层叠样式表 (Cascading Style Sheets,CSS),JavaScript (一种直译式脚本语言) 来丰富页面展示,随着 ajax 一种创建交互式网页应用的网页开发技术,英文全称: Asynchronous JavaScript And XML) 的出现,客户端又多了一种向服务器端获取数据的方法,这些其实都是基于 HTTP 协议的。同样到了移动互联网时代,页面可以在手机端浏览器里显示,但是和电脑端相比,手机端的网络情况更加复杂,经常涉及到蜂窝网络与无线局域网之间的切换,因此需要对 HTTP 进行深入理解并不断优化 。 SPDY (发音如英语 :speedy) 及 QUIC 就是在这样的背景下相继出现,接下来先分别介绍 HTTP 及 SPDY 的发展、QUIC 的特点,然后进行对比分析。

协程切换只是简单地改变执行函数栈,不涉及内核态与用户态转化,也涉及上下文切换,开销远小于进程/线程切换。协程的概念虽早已提出,随着近些年年越来越多的语言(go、 Haskell)内置对协程支持才被开发者所熟知,协程极大的优化了开发者编程体验,在同步、顺序编程风格能快速实现程序逻辑,还拥有IO多路复用异步编程的性能。典型的采用协程模型的服务有openresty, gevent, golang。

学习交流:

图片 3image

2.2 SPDY 与 HTTP/2

    SPDY 是一种基于 TCP 的开放网络传输应用层协议,由 Google 开发,用来发送网页内容。设计 SPDY 的目的在于降低网页的加载时间,与 HTTP/1.1 相比,它在以下几方面作了改进。

    (1) 降低延迟。针对 HTTP 高延迟的问题,SPDY 采取了多路复用 (multiplexing)。多路复用通过多个请求流共享一个 TCP 连接的方式,同时服务端也可通过一个连接发出多个应答流,提高了服务端性能。多路复用技术可以减少网络拥塞、降低延迟,同时提高了带宽的利用率。

    (2) 请求优先级。多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY 允许给每个请求设置优先级,这样重要的请求就会优先得到响应。比如浏览器加载首页,首页的 html 内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。

    (3) header 压缩。HTTP 1.x 的 header 很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量,降低延迟。

    (4) 基于 HTTPS 的加密协议传输,大大提高了传输数据的可靠性。SPDY中广泛应用了安全传输层协议 (Transport Layer Security,TLS) 加密,传输内容也均以 gzip 或 DEFLATE 格式压缩。

    (5) 服务端推送。采用了 SPDY 的网页,在客户端发出一个资源请求时,服务端会把相关的资源主动推送到客户端而避免等待客户端再发出请求后响应。这可以减少页面加载时间。需要说明的是,SPDY 并不用于替换 HTTP,它只是修改了 HTTP 的请求与应答在网络上传输的方式; 这意味着只需增加一个 SPDY 传输层,现有的所有服务端应用均不用做任何修改。当使 用SPDY 的方式传输时,HTTP请求会被处理、标记简化和压缩。比如,每一个 SPDY 端点会持续跟踪每一个在之前的请求中已经发送的 HTTP 报文头部,从而避免重复发送还未改变的头部。而还未发送的报文的数据部分将在被压缩后被发送。SPDY 的构成如图 1 所示。

图片 4

    2015 年推出的 HTTP/2 大部分基于 SPDY 实现,主要区别为 :

    (1) HTTP/2 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS。

    (2) HTTP/2 消息头 (header) 的压缩算法采用 HPACK,而非SPDY 采用的 DEFLATE。由于 HTTP/2 推出时间不长,相较于 HTTP/1.1 应用范围还不广,但是未来肯定会逐渐取代 HTTP/1.1。

1)客户端;

[1] 开源实时音视频技术WebRTC的文章:

《开源实时音视频技术WebRTC的现状》

《简述开源实时音视频技术WebRTC的优缺点》

《访谈WebRTC标准之父:WebRTC的过去、现在和未来》

《良心分享:WebRTC 零基础开发者教程[附件下载]》

《WebRTC实时音视频技术的整体架构介绍》

《新手入门:到底什么是WebRTC服务器,以及它是如何联接通话的?》

《WebRTC实时音视频技术基础:基本架构和协议栈》

《浅谈开发实时视频直播平台的技术要点》

《[观点] WebRTC应该选择H.264视频编码的四大理由》

《基于开源WebRTC开发实时音视频靠谱吗?第3方SDK有哪些?》

《开源实时音视频技术WebRTC中RTP/RTCP数据传输协议的应用》

《简述实时音视频聊天中端到端加密的工作原理》

《实时通信RTC技术栈之:视频编解码》

《开源实时音视频技术WebRTC在Windows下的简明编译教程》

《网页端实时音视频技术WebRTC:看起来很美,但离生产应用还有多少坑要填?》

>> 更多同类文章 ……

[2] 实时音视频开发的其它精华资料:

《即时通讯音视频开发:视频编解码之理论概述》

《即时通讯音视频开发:视频编解码之数字视频介绍》

《即时通讯音视频开发:视频编解码之编码基础》

《即时通讯音视频开发:视频编解码之预测技术介绍》

《即时通讯音视频开发:认识主流视频编码技术H.264》

《即时通讯音视频开发:如何开始音频编解码技术的学习》

《即时通讯音视频开发:音频基础及编码原理入门》

《即时通讯音视频开发:常见的实时语音通讯编码标准》

《即时通讯音视频开发:实时语音通讯的回音及回音消除概述》

《即时通讯音视频开发:实时语音通讯的回音消除技术详解》

《即时通讯音视频开发:实时语音通讯丢包补偿技术详解》

《即时通讯音视频开发:多人实时音视频聊天架构探讨》

《即时通讯音视频开发:实时视频编码H.264的特点与优势》

《即时通讯音视频开发:实时音视频数据传输协议介绍》

《即时通讯音视频开发:聊聊P2P与实时音视频的应用情况》

《即时通讯音视频开发:移动端实时音视频开发的几个建议》

《即时通讯音视频开发:视频编码H.264、VP8的前世今生》

《实时语音聊天中的音频处理与编码压缩技术简述》

《网易视频云技术分享:音频处理与压缩技术快速入门》

《学习RFC3550:RTP/RTCP实时传输协议基础知识》

《基于RTMP数据传输协议的实时流媒体技术研究》

《声网架构师谈实时音视频云的实现难点》

《浅谈开发实时视频直播平台的技术要点》

《还在靠“喂喂喂”测试实时语音通话质量?本文教你科学的评测方法!》

《实现延迟低于500毫秒的1080P实时音视频直播的实践分享》

《移动端实时视频直播技术实践:如何做到实时秒开、流畅不卡》

《如何用最简单的方法测试你的实时音视频方案》

《技术揭秘:支持百万级粉丝互动的Facebook实时视频直播》

《简述实时音视频聊天中端到端加密的工作原理》

《移动端实时音视频直播技术详解:开篇》

《移动端实时音视频直播技术详解:采集》

《移动端实时音视频直播技术详解:处理》

《移动端实时音视频直播技术详解:编码和封装》

《移动端实时音视频直播技术详解:推流和传输》

《移动端实时音视频直播技术详解:延迟优化》

《理论联系实际:实现一个简单地基于HTML5的实时视频直播》

《IM实时音视频聊天时的回声消除技术详解》

《浅谈实时音视频直播中直接影响用户体验的几项关键技术指标》

《如何优化传输机制来实现实时音视频的超低延迟?》

《首次披露:快手是如何做到百万观众同场看直播仍能秒开且不卡顿的?》

《Android直播入门实践:动手搭建一套简单的直播系统》

《网易云信实时视频直播在TCP数据传输层的一些优化思路》

《实时音视频聊天技术分享:面向不可靠网络的抗丢包编解码器》

《P2P技术如何将实时视频直播带宽降低75%?》

《专访微信视频技术负责人:微信实时视频聊天技术的演进》

《腾讯音视频实验室:使用AI黑科技实现超低码率的高清实时视频聊天》

《微信团队分享:微信每日亿次实时音视频聊天背后的技术解密》

《近期大热的实时直播答题系统的实现思路与技术难点分享》

《福利贴:最全实时音视频开发要用到的开源工程汇总》

《七牛云技术分享:使用QUIC协议实现实时视频直播0卡顿!》

《实时音视频聊天中超低延迟架构的思考与技术实践》

《理解实时音视频聊天中的延时问题一篇就够》

《实时视频直播客户端技术盘点:Native、HTML5、WebRTC、微信小程序》

>> 更多同类文章 ……

1. 完美解决 iOS 端小程序连麦直播

参考文献

    [1] Megyesi P, Krämer Z, Molnár S. How quick is QUIC[C] Communications (ICC), 2016 IEEE International Conference on. IEEE, 2016: 1-6.

    [2] Biswal P, Gnawali O. Does QUIC make the Web faster[C] Global Communications Conference (GLOBECOM), 2016 IEEE. IEEE, 2016: 1-6.

    [3] Gratzer F. QUIC-Quick UDP Internet Connections[J]. Future Internet (FI) and Innovative Internet Technologies and Mobile Communications (IITM), 2016, 39.

    [4] Carlucci G, De Cicco L, Mascolo S. HTTP over UDP: an Experimental Investigation of QUIC[C] Proceedings of the 30th Annual ACM Symposium on Applied Computing. ACM, 2015: 609-614.

知识点扫盲:

图片 5

因此,解决小程序延时问题的本质在于缩短T2的延时。

3 QUIC

1)网络接入层;

在原生 APP 上实现连麦直播的劣势是什么呢?开发门槛高,开发周期长、人力成本高。另外,从获取用户和传播的角度来讲,也没有浏览器和微信小程序那么便利。

社交直播、在线教育场景需要实现多人的直播连麦。在保证画面分辨率、音频质量的同时,声网的小程序方案目前可支持 7 人同时在线连麦互动。

1)关于QUIC协议:《技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解》;

在原生 APP 上,开发者可以得到全面的把控能力,让用户可以获得更好的体验。主流的视频直播平台都有自己的原生 APP 平台,而浏览器和微信小程序相对来说是辅助的。原生 APP 的用户体验是最好的,而且对开发者来说也是最可控的。

通过附加低延时、高质量的音视频互动,可以为微信小程序延伸出更广阔的应用场景。不过在开发过程中还需要解决三大难点。

3)服务器。

在原生 APP 上实现连麦直播的优势是,对上面所说的七个环节有较好的把控,可以获得比较低的延迟,能自研实现语音前处理 3A 算法,包括回声消除,还有对抖动缓冲策略和码率自适应的策略都有比较好的把控。另外,可以自主选择使用 RTMP 协议还是基于 UDP 的私有协议,对抗弱网环境更加有保障。

声网Agora Native SDK 支持 iOS、Android、Windows、macOS、Web 主流系统平台。基于声网的小程序直播互动连麦方案开发的小程序,在 Agora SD-RTN™ 的低延时实时网络环境下可实现与其它平台 Native App 的无缝互通。

7.1)进程:

图片 6

4. 高质量,低延时

值得注意的是基于安全性考虑,浏览器标准未提供UDP收发能力,QUIC协议也只在chrome得到了支持,WebRTC也还不是浏览器事实标准且协议初始目的是用于实现点对点的音视频通信,协议内容过于庞杂不容易提炼应用于游戏开发中,因而现阶段H5游戏还只能采用HTTP或Websocket方式通讯。

上图是 WebRTC 的结构图。我们可以看到 WebRTC 包括了音频引擎,视频引擎、传输引擎等,最底层的虚线框表示可以重载,也就是说浏览器把最底层的音视频渲染和网络传输的底层能力开放给开发者,开发者可以根据自己的需求选择是否进行重载。音频引擎中,包括了两个编解码器:iSAC 和 iLBC,前者针对宽带和超宽带的音频编解码,后者针对窄带音频编解码。

然而通过这两个接口都是基于 RTMP 协议进行拉流与推流。这种基于 TCP 的协议天然存在较高的延时,并不适用于直播连麦场景。

通过以上分析,对于游戏协议类型的选择我们给出有以下准则:

如果要将微信小程序接入实时音视频传输网络,中间得有接入服务器,我们叫接入层。在接入层我们需要做协议的转换,比如说,如果实时音视频传输网络是使用基于 UDP 的私有协议,那么要把 RTMP 协议转为基于 UDP 的私有协议。还有媒体格式的转换,如果和实时传输网络的媒体格式不一样,还需要进行转换。

2. 小程序与Native App无缝互通

为了处理来自客户端的并发请求,服务端有4种常见的并发模型。

由于 WebRTC 不提供媒体服务器的实现,因此需要把浏览器 WebRTC 接入到媒体服务器后端,这个可以是自研的,也可以是第三方的服务。浏览器 WebRTC 和媒体服务器后端之间的协议和媒体格式是不一样的,因此要做协议和格式的转换。WebRTC 用的基于 UDP 的 SRTP,需要把它转换成媒体服务器的基于 UDP 的私有协议。另外,媒体格式也需要转换,因为 WebRTC 中语音视频格式默认用的是 VP8 或者 VP9。同时实时传输网络中有关信令调度也需要做一些调整。浏览器 WebRTC 和媒体服务器后端之间的接入层也可以采用开源的 WebRTC Gateway(比如说 janus)来实现。

图片 7image

进程是最早采用的并发模型,进程作为操作资源分配、调度的单位,拥有独立的运行空间。进程并发模型中每个请求由独立的进程来处理,进程一次只能处理一个请求,该模型最大的优点就是简单。如果处理请求的进程由于系统调用而阻塞或进程的时间片用完,抢占式的进程调度器就会暂停旧进程执行,调度执行新的进程,这个过程涉及大开销的上下文切换,进程并发模型的缺点是比较低效。最典型的采用进程模型的服务有Apache。

2)小程序 WebView 不是完整的浏览器,要比普通浏览器表现差而且有很多的限制;

小程序与客户端均通就“近”接入策略,让用户接入质量最好的数据节点,通过 SD-RTN™ 的软件定义优化路由选择最优路径,自动避免网络拥塞,并规避骨干网络故障的影响,并保证音视频数据以最佳质量传输。

2)接收来自客户端大量并发请求。

那时候,在微信小程序中无法进行实时音视频互动。微信小程序在去年 12 月宣布开放实时音视频能力,再加上去年 6 月苹果宣布即将支持 WebRTC,业内一下子千树万树梨花开,前途一片光明。

图片 8

郑重声明:本文版权归新匍京a奥门-最全网站手机版app官方下载所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。