as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
AWS
文档
Support
Contact Us
My Cases
新手入门
设计和开发
应用发布
参考
支持

适用于Vega的React Native W3C媒体API

适用于Vega的React Native W3C媒体API

如今,流媒体应用开发者面临的挑战是在基于不同操作系统(如Android、iOS和网页浏览器)的不同设备系列上开发和维护多个媒体播放堆栈。维护多个媒体播放器会加大工程工作量,增加维护成本,并可能造成客户体验不一致和功能在不同平台之间有所差异。

通过Vega我们找到了机会,基于开放网络标准和Gstreamer等开源多媒体框架,统一播放API和堆栈。我们正在构建一个W3C(万维网联盟)Media React Native JavaScript组件,该组件将W3C媒体API引入Vega SDK和Vega设备。这提供了一种在网页浏览器、Vega和Fire OS设备上通用的媒体播放堆栈的解决方案。

什么是W3C媒体API?

网页应用开发者非常熟悉WHATWGW3C开放标准组织定义的媒体API HTMLMediaElement媒体源扩展 (MSE) 和加密媒体扩展 (EME)。

HTMLMediaElement是主要的播放器API,它支持播放任何媒体URL,并提供高级别播放控制API,例如暂停、播放和搜索。它还支持查询内容的播放状态和媒体轨道相关信息。我们使用术语URL模式播放来指代这种播放模式。

媒体源扩展 (MSE) 是HTMLMediaElement API的扩展,让JavaScript (JS)应用开发者能够播放HLS和MPEG DASH等自适应流媒体内容。通过此扩展,JS应用下载并解析HLS/DASH清单,根据计算出的带宽下载所需的媒体片段,并通过此API将其注入播放管道。这让应用开发者能够更好地控制最适合其内容的播放体验。我们使用术语“MSE模式播放”来指代这种播放模式。

加密媒体扩展 (EME) 是HTMLMediaElement API的扩展,让JS应用开发者能够获取并向播放管道提供DRM许可证,以解密受DRM保护的安全内容,并通过系统中的安全视频路径进行播放。

这些API一般可在桌面和嵌入式网页浏览器中使用,例如Chromium、Microsoft Edge、Safari、Opera等。网页应用开发者使用HTML/CSS/JavaScript编码,以使用这些W3C媒体API在网页浏览器中播放DRM和清晰媒体。

W3C媒体API有什么优点?

MSE API让应用开发者可以构建高级播放体验,例如无间隙的剧集播放(适用于网络连续剧和播放列表)和主要内容播放期间无间隙的广告插入(片前、片中和片后)。这是通过公开函数来实现的,这些函数让应用开发者可以管理(添加/删除/更新)媒体管道中排队等待解码和呈现的媒体样本,所有这些采用的都是开发者熟悉的JavaScript语法。

W3C媒体API支持哪些流媒体格式?

  1. 通过MSE模式播放,应用可以播放任何自适应流媒体格式,例如MPEG DASH、HLS和SmoothStreaming,只要内容容器格式与MSE字节流注册表中指定的列表兼容。
  2. 通过URL模式播放,应用可以播放MP4、MP3、OGG、FLV和MKV等文件格式的非自适应流媒体。

W3C媒体API支持哪些音频/视频编解码器?

W3C媒体API支持流媒体用例中使用的流行音频/视频编解码器,例如用于音频的Dolby Audio(AC3、eAC3、AC4、EC3_JOC)、AAC(LC、AAC+和eAAC+)、MP3、Opus、FLAC,用于音频的Vorbis以及用于视频的H.264、H.265、VP8、VP9、MPEG4和AV1。

W3C媒体API支持哪些DRM架构?

W3C媒体API支持Widevine (L1) 和PlayReady (SL3000) 等DRM架构。

支持哪些隐藏式字幕/字幕格式?

W3C媒体API将支持CEA 608、CEA 708、TTML、WebVTT和SRT格式的带内和带外隐藏式字幕和字幕。应用将能够根据语言选择隐藏式字幕和字幕。

支持W3C API的原生堆栈是怎样的?

以下部分从下到上描述了此堆栈。

  1. 平台核心媒体组件: 这些平台/操作系统原生API集合允许访问底层硬件处理块,以解密、解码和呈现音频/视频帧并在视频表面顶部显示隐藏式字幕。

    1. 音频/视频解码器: 平台API,提供对硬件加速解码器或软件音频/视频解码器的访问权限,该解码器由平台的SoC和BSP支持,用于对帧进行解码。
    2. DRM: 用于处理DRM许可证和密钥的平台API,并与解码器组件配合使用以解密可信执行环境 (TEE) 中的帧。
    3. 视频表面: 用于在屏幕上呈现视频的平台API。
    4. 音频: 用于播放PCM和Dolby Audio帧的平台API。
    5. 隐藏式字幕/字幕组件: 呈现隐藏式字幕和字幕的用户界面组件。
  2. 开源GStreamer多媒体框架: 这个基于Glib C的开源多媒体框架是Vega和Fire OS中媒体播放框架的基础。我们使用核心Gstreamer库、一些开源插件和亚马逊构建的自定义插件,以便使用平台核心媒体组件解密、解码和呈现音频/视频和隐藏式字幕。
  3. 媒体播放器: 该层是一个原生 (C/C++) 组件,它在幕后使用Gstreamer API来提供ExoPlayer,例如用于播放注入的音频/视频样本的高级别简单播放API或内容URL。
  4. 作为React Native组件的W3C Media JS API。该层由符合W3C规范的HTMLMediaElement、媒体源扩展 (MSE) 和加密媒体扩展 (EME) JavaScript API组成。Native W3C Media是该规范的原生实现,它使用MediaPlayer层来解复用和播放MPEG DASH和HLS等自适应流媒体协议的音频/视频分段/片段。

支持哪个MSE/EME JavaScript播放器?

Vega W3C媒体播放器支持Shaka播放器。有关使用Shaka播放器的信息,请参阅使用Shaka播放器来播放自适应流媒体内容 (HLS/DASH)

在我们增强媒体播放器的同时,我们正在调查市场上应用开发者在其网页应用中使用的其他MSE/EME JavaScript播放器。以下是一些支持使用MSE API进行自适应流媒体播放的热门播放器列表。如果您能提供反馈告知您当前所用的播放器,我们不胜感激。

开源MSE/EME JavaScript播放器:

  1. Shaka播放器

商用MSE/EME JavaScript播放器

  1. Bitmovin
  2. Brightcove
  3. JW播放器

我们当前使用的是W3C标准委员会提供的Shaka播放器(开源)和MSE Test Suite来测试和验证我们的堆栈。

关于适用于Vega的React Native应用集成的建议

我们建议适用于Vega的React Native应用通过任何JavaScript MSE/EME播放器来使用React Native W3C Media JavaScript API。我们将让应用开发者能够“自带播放器”,并与Vega SDK的W3C媒体API集成。

如果此建议不能满足您的应用要求,请咨询您的解决方案架构师或您在亚马逊的联系人,以便与我们的工程团队安排其他集成选项的讨论。

另请参阅

媒体播放器API


Last updated: 2025年10月1日