FMUSER更轻松地传输视频和音频!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷兰语
sq.fmuser.org ->阿尔巴尼亚人
ar.fmuser.org ->阿拉伯语
hy.fmuser.org - >亚美尼亚
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄罗斯语
bg.fmuser.org - >保加利亚
ca.fmuser.org ->加泰罗尼亚语
zh-CN.fmuser.org ->中文(简体)
zh-TW.fmuser.org - >中国(繁体)
hr.fmuser.org ->克罗地亚语
cs.fmuser.org ->捷克
da.fmuser.org ->丹麦语
nl.fmuser.org - >荷兰
et.fmuser.org ->爱沙尼亚语
tl.fmuser.org ->菲律宾
fi.fmuser.org ->芬兰语
fr.fmuser.org - >法国
gl.fmuser.org ->加利西亚语
ka.fmuser.org ->乔治亚
de.fmuser.org ->德语
el.fmuser.org - >希腊
ht.fmuser.org ->海地克里奥尔语
iw.fmuser.org ->希伯来语
hi.fmuser.org ->印地语
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰岛语
id.fmuser.org ->印尼语
ga.fmuser.org ->爱尔兰
it.fmuser.org - >意大利
ja.fmuser.org ->日语
ko.fmuser.org ->韩文
lv.fmuser.org ->拉脱维亚
lt.fmuser.org - >立陶宛
mk.fmuser.org ->马其顿语
ms.fmuser.org ->马来语
mt.fmuser.org ->马耳他语
no.fmuser.org - >挪威
fa.fmuser.org ->波斯语
pl.fmuser.org ->波兰语
pt.fmuser.org ->葡萄牙语
ro.fmuser.org - >罗马尼亚
ru.fmuser.org ->俄语
sr.fmuser.org ->塞尔维亚语
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亚
es.fmuser.org ->西班牙语
sw.fmuser.org ->斯瓦希里语
sv.fmuser.org ->瑞典语
th.fmuser.org - >泰国
tr.fmuser.org ->土耳其语
uk.fmuser.org ->乌克兰语
ur.fmuser.org ->乌尔都语
vi.fmuser.org - >越南
cy.fmuser.org ->威尔士语
yi.fmuser.org - >意第绪语
近年来,对多平台自适应的需求不断增长,导致了流媒体自适应比特率回放的兴起,这迫使Web和移动开发人员重新考虑视频技术的逻辑。 首先,这些巨头分别发布了HLS,HDS和Smooth Streaming协议,将所有相关细节隐藏在其专用SDK中。 开发人员无法随意修改播放器中多媒体引擎的逻辑:您无法修改自适应比特率和缓存大小甚至切片长度的规则。 这些播放器使用起来可能很简单,但是您没有太多的自定义选项,甚至只能容忍不良功能。
但是随着不同应用场景的增加,对可定制功能的需求越来越强。 就在实时广播和点播之间,缓冲区管理,ABR策略和缓存策略存在差异。 这些要求催生了一系列较低级别的多媒体操作API:Flash上的Netstream,HTML5上的Media Source Extensions和Android上的Media Codec。 同时,业界出现了基于HTTP的标准流格式MPEG-DASH。 。 这些更高级的功能为开发人员提供了更大的灵活性,使他们能够构建适合其业务需求的播放器和多媒体引擎。
今天,我们将分享如何构建现代播放器,以及构建该播放器需要哪些关键组件。 一般来说,典型的播放器可以分为三个部分:UI,多媒体引擎和解码器。
用户界面(UI):这是播放器的最上部。 它通过三种不同的功能特征来定义最终用户的观看体验:皮肤(播放器的外观设计),UI(所有可自定义的功能,如播放列表和社交共享等)以及业务逻辑(特定的业务逻辑)例如广告,设备兼容性逻辑和认证管理等)。
多媒体引擎:它处理与播放控制有关的所有逻辑,例如描述文件的分析,视频剪辑的提取以及自适应比特率规则的设置和切换。 我们将在下面详细解释这一部分。 由于这些引擎通常紧密地绑定到平台,因此可能有必要使用各种不同的引擎来覆盖所有平台。
解码器和DRM管理器:播放器的最低部分是解码器和DRM管理器。 该层的功能直接调用操作系统公开的API。 解码器的主要功能是解码和呈现视频内容,而DRM管理器控制是否有权通过解密过程进行播放。
接下来,我们将使用示例介绍每一层所扮演的不同角色。
1.用户界面(UI)
UI层是播放器的顶层。 它控制您的用户可以看到并与之交互的内容。 同时,您可以使用自己的品牌对其进行自定义,以为您的用户提供独特的用户体验。 该层最接近我们正在谈论的前端开发部分。 在UI内,我们还包括业务逻辑组件,这些组件构成了回放体验的独特性,尽管最终用户无法直接与该功能的这一部分进行交互。
UI部分主要包含三个组件:
1)皮肤
外观是播放器与视觉相关的部分的通用术语:进度控制栏,按钮,动画图标等,如图2所示。与大多数设计组件一样,该组件的这一部分也使用CSS来实现,该CSS可以易于由设计人员或开发人员集成(即使您使用的是JW Player和Bitdash等完整的解决方案)。
2) 界面逻辑
UI逻辑部分定义了播放和用户交互期间的所有可见交互:播放列表,缩略图,播放通道选择和社交媒体共享。 根据您期望获得的播放体验,过去可以在此部分中添加许多其他功能,其中许多功能以插件的形式存在,也许您会发现一些启发:插件·videojs / video.js Wiki·GitHub逻辑部分包含许多功能。 我们不会详细介绍它们,而是以Eurosport播放器的用户界面为例来直观地体验这些功能。
除了传统的UI元素外,还有一个非常有趣的功能。 当用户观看DVR流媒体时,实况广播以小窗口的形式显示,观众可以随时通过该小窗口返回实况广播。 由于布局或UI和多媒体引擎是完全独立的,因此可以使用HTML5中的dash.js只需几行代码即可实现这些功能。 对于UI部分,实现它的最好方法是以插件/模块的形式向UI核心模块添加各种功能。
3)业务逻辑
除了以上两个部分的“可见”功能之外,还有一个不可见的部分构成了您的业务的唯一性:身份验证和付款,渠道和播放列表的获取以及广告。 还有一些与技术相关的事物,例如A / B测试模块和与设备相关的配置。 这些配置用于在各种不同类型的设备中选择多个不同的媒体引擎。
为了揭示底部的隐藏复杂性,我们将在此处更详细地说明这些模块:
设备检测和配置逻辑:这是最重要的功能之一,因为它将播放和渲染分开。 例如,基于浏览器的不同版本,播放器可能会自动选择基于HTML5 MSE,hls.js的多媒体引擎或基于Flash的播放引擎FlasHls为您播放HLS视频流。 这部分的最大特点是,无论您使用哪种底层引擎,都可以使用相同的JavaScript或CSS在上层自定义UI或业务逻辑。
检测用户设备的能力使您可以根据需要配置最终用户的体验:如果您是在移动设备而不是4K屏幕设备上播放,则可能需要以较低的比特率开始。
A / B测试逻辑:A / B测试是为了使生产过程中的某些用户灰白。 例如,您可以为某些Chrome用户提供一个新按钮或新的多媒体引擎,还可以确保其所有工作按计划进行。
广告(可选):在客户端处理广告是最复杂的业务逻辑之一。 如插件模块videojs-contrib-ads的流程图所示,插入广告的过程包含多个步骤。 对于HTTP视频流,您将或多或少使用一些现有的格式,例如VAST,VPAID或Google IMA,它们可以帮助您从广告服务器中提取视频广告(通常是过时的无响应格式),分别放置在早期,中期和视频的后期播放,不能跳过。
总结:
为了满足您的自定义需求,您可以选择使用包含所有经典功能的JW Player进行播放(它还允许您自定义某些功能),或者基于开放源代码播放器(如Video.js)自定义自己的功能。 即使为了统一浏览器和本机播放器之间的用户体验,您也可以考虑使用React Native进行UI或外观开发,使用Haxe进行业务逻辑开发。 这些出色的库可以有许多不同的类型。设备之间共享同一组代码库。
2、多媒体引擎
近年来,多媒体引擎已作为新的独立组件出现在播放器体系结构中。 在MP4时代,该平台处理了所有与播放有关的逻辑,并且仅向开发人员开放了一些与多媒体处理有关的功能(仅播放,暂停,拖放和全屏模式之类的功能)。
但是,基于HTTP的新流媒体格式需要全新的组件来处理和控制新的复杂性:解析声明文件,下载视频剪辑,自适应比特率监视,决策制定等等。 首先,ABR的复杂性是由平台或设备提供商来处理的。 但是,随着对锚控制和自定义播放器的需求不断增加,一些新播放器逐渐开放了一些较低级别的API(例如Web上的Media Source Extensons,Flash上的Netstream和Android平台上的Media Codec),并迅速吸引了人们。基于这些基础API的许多强大而强大的多媒体引擎。
接下来,我们将详细解释现代多媒体处理引擎中每个组件的细节:
1) 声明文件解释和解析器
在基于HTTP的视频流中,所有内容都以描述文件开头。 声明文件包含媒体服务器需要理解的元信息:多少种不同类型的视频质量,语言和字母等,以及它们是什么。 解析器从XML文件(用于HLS的特殊m3u8文件)获得描述信息,然后从该信息获得正确的视频信息。 当然,有许多类型的媒体服务器,并且并非所有媒体服务器都能正确实现规范,因此解析器可能需要处理一些其他实现错误。
提取视频信息后,解析器将从其中解析数据以构造流式可视图像,并知道如何获取不同的视频剪辑。 在某些多媒体引擎中,这些视觉图像首先以抽象的多媒体图像的形式出现,然后在屏幕上绘制不同HTTP视频流格式的不同特征。
在直播流场景中,解析器还必须定期重新获取声明文件,以获得最新的视频剪辑信息。
2) 下载器(下载申报文件、多媒体剪辑和密钥)
下载器是包装用于处理HTTP请求的本机API的模块。 它不仅用于下载多媒体文件,而且在必要时还可以用于下载声明文件和DRM密钥。 下载器在处理网络错误和重试时起着非常重要的作用,同时能够收集当前可用带宽上的数据。
注意:在点对点实时通信方案中,下载多媒体文件可以使用HTTP协议或其他协议,例如WebRTC协议。
3) 流媒体引擎
流播放引擎是与解码器API交互的中央模块。 它将不同的多媒体剪辑导入到编码器中,并处理回放期间的多速率切换和差异(例如声明文件和视频片段之间的差异以及自动冻结)。 跳帧)。
4)资源质量参数预测器(带宽、CPU、帧率等)
估算器从各个维度(块大小,每个片段的下载时间和跳过的帧数)获取数据,并将它们汇总以估算用户可用的带宽和CPU计算能力。 这是用于ABR(自适应比特率,自适应比特率)切换控制器做出判断的输出。
5) ABR开关控制器
ABR切换器可能是多媒体引擎中最关键的部分,通常是最容易被忽视的部分。 控制器读取估算器输出的数据(带宽和跳过的帧数),使用自定义算法根据这些数据做出判断,并告知流媒体引擎是否需要切换视频或音频质量。 该领域有很多研究工作,最大的困难是要在重新缓冲风险和切换频率之间找到平衡(切换太频繁可能会导致不良的用户体验)。
6) DRM 管理器(可选组件)
如今,所有付费视频服务都基于DRM管理,并且DRM在很大程度上取决于平台或设备,我们稍后会在解释播放器时看到。 多媒体引擎中的DRM管理器是较低层解码器中内容解密API的包装。 只要有可能,它将尝试以抽象的方式来掩盖浏览器或操作系统的实现细节上的差异。 该组件通常与流处理引擎紧密连接,因为它经常与解码器层交互。
7) 格式转换多路复用器(可选组件)
稍后我们将看到,每个平台在打包和编码方面都有其局限性(Flash读取封装在FLV容器中的H.264 / AAC文件,MSE读取封装在ISOBMFF容器中的H.264 / AAC文件。)。 这导致某些视频剪辑需要在解码之前进行格式化。 例如,通过MPEG2-TS到ISOBMFF格式的转换多路复用器,hls.js可以使用MSE格式的内容来播放HLS视频流。 多媒体引擎级别的格式转换多路复用器受到质疑; 但是,随着现代JavaScript或Flash解释能力的提高,它带来的性能损失几乎可以忽略不计,并且不会对用户体验造成太大影响。
总结
多媒体引擎中还有许多不同的组件和功能,从字幕到屏幕截图再到广告插入等等。 接下来,我们也会单独写一篇文章来比较各种不同发动机的差异,通过一些测试和市场数据来给发动机选择一些实质性的指导。 值得注意的是,要构建一个兼容各种平台的播放器,提供多个可自由替换的多媒体引擎非常重要,因为底层解码器与用户平台有关。 接下来,我们将重点介绍这方面。
3.解码器和DRM管理器
出于解码性能(解码器)和安全考虑(DRM)的考虑,解码器和DRM管理器与操作系统平台紧密绑定。
1) 解码器
解码器处理与底层播放有关的逻辑。 它以不同的封装格式解压缩视频,对它们的内容进行解码,然后将解码后的视频帧交付给操作系统以进行渲染,并最终允许最终用户查看。
随着视频压缩算法变得越来越复杂,解码过程是需要大量计算的过程,并且为了确保解码性能和流畅的播放体验,解码过程需要强烈地依赖于操作系统和硬件。 当前的大多数解码都依赖于GPU加速解码的帮助(这也是免费且功能更强大的VP9解码器未能赢得H.264市场地位的原因之一)。 如果没有GPU加速,则解码1080P视频将占用大约CPU计算的70%,并且帧丢失率可能非常严重。
在解码和渲染视频帧的基础上,管理器还提供了本机缓冲区。 多媒体引擎可以直接与缓冲区交互,以实时了解缓冲区的大小,并在必要时进行刷新。
如前所述,每个平台都有其自己的呈现引擎和相应的API:Flash平台具有Netstream,Android平台具有Media Codec API,而Web具有标准的Media Sources Extensions。 MSE越来越引人注目,并且可能会在将来成为浏览器之后在其他平台上的事实上的标准。
2) 数字版权管理经理
如今,在转移制片厂制作的付费内容时,DRM是必需的。 必须防止这些内容被盗,因此DRM的代码和工作过程将受到最终用户和开发人员的阻止。 解密的内容将不会离开解码层,因此不会被截获。
为了使DRM标准化并为各种平台的实现提供一定的互操作性,几家Web巨头联合创建了Common Encryption(CENC)和通用多媒体加密扩展Encrypted Media Extensions,以提供多个DRM提供程序(例如EME可用于Playready通过Edge平台上的Widewine和通过Chrome平台上的Widewine来构建一组通用API,可以从DRM授权模块读取视频内容加密密钥以进行解密。
CENC宣布了一套标准的加密和密钥映射方法,仅通过提供相同的密钥,即可用于在多个DRM系统上解密相同的内容。
在浏览器内部,基于视频内容的元信息,EME可以识别使用哪个DRM系统进行加密,并调用相应的解密模块(内容解密模块CDM)来解密由CENC加密的内容。 解密模块CDM将处理与内容授权有关的工作,获取密钥并解密视频内容。
CENC没有指定授权发布,授权格式,授权存储,使用规则和权限映射关系以及其他详细信息。 这些细节的处理是DRM提供者的责任。
4. 总结
今天,我们对视频播放器三个级别的不同内容有了深刻的了解。 这种现代播放器结构的最好之处在于,其交互部分与多媒体引擎的逻辑部分完全分离,从而使主持人能够无缝,自由,灵活地定制最终用户的体验。 ,同时在各种不同的终端设备上使用不同的多媒体引擎可以确保各种不同格式的视频内容的流畅播放。
在Web平台上,借助于dash.js,Shaka Player和hls.js等多媒体引擎的帮助,这些引擎往往是成熟的库,MSE和EME成为回放的新标准,越来越多的有影响力的制造商正在使用他们。 这些播放引擎。 近年来,注意力也开始扩展到机顶盒和互联网电视,而且我们也看到越来越多的此类新设备将MSE用作其底层多媒体处理引擎。 我们将继续加大努力以支持这些标准。
|
输入电子邮件以获取惊喜
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷兰语
sq.fmuser.org ->阿尔巴尼亚人
ar.fmuser.org ->阿拉伯语
hy.fmuser.org - >亚美尼亚
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄罗斯语
bg.fmuser.org - >保加利亚
ca.fmuser.org ->加泰罗尼亚语
zh-CN.fmuser.org ->中文(简体)
zh-TW.fmuser.org - >中国(繁体)
hr.fmuser.org ->克罗地亚语
cs.fmuser.org ->捷克
da.fmuser.org ->丹麦语
nl.fmuser.org - >荷兰
et.fmuser.org ->爱沙尼亚语
tl.fmuser.org ->菲律宾
fi.fmuser.org ->芬兰语
fr.fmuser.org - >法国
gl.fmuser.org ->加利西亚语
ka.fmuser.org ->乔治亚
de.fmuser.org ->德语
el.fmuser.org - >希腊
ht.fmuser.org ->海地克里奥尔语
iw.fmuser.org ->希伯来语
hi.fmuser.org ->印地语
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰岛语
id.fmuser.org ->印尼语
ga.fmuser.org ->爱尔兰
it.fmuser.org - >意大利
ja.fmuser.org ->日语
ko.fmuser.org ->韩文
lv.fmuser.org ->拉脱维亚
lt.fmuser.org - >立陶宛
mk.fmuser.org ->马其顿语
ms.fmuser.org ->马来语
mt.fmuser.org ->马耳他语
no.fmuser.org - >挪威
fa.fmuser.org ->波斯语
pl.fmuser.org ->波兰语
pt.fmuser.org ->葡萄牙语
ro.fmuser.org - >罗马尼亚
ru.fmuser.org ->俄语
sr.fmuser.org ->塞尔维亚语
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亚
es.fmuser.org ->西班牙语
sw.fmuser.org ->斯瓦希里语
sv.fmuser.org ->瑞典语
th.fmuser.org - >泰国
tr.fmuser.org ->土耳其语
uk.fmuser.org ->乌克兰语
ur.fmuser.org ->乌尔都语
vi.fmuser.org - >越南
cy.fmuser.org ->威尔士语
yi.fmuser.org - >意第绪语
FMUSER更轻松地传输视频和音频!
联系我们
分类目录
订阅电子邮件