remote-control/directional-pad(方向键)输入的焦点导航。单击/触摸/拖动用户体验实现很少与电视用户体验兼容,而且电视设备的耗电量往往低于台式机和移动设备。例如,通过减少电视动画来优化网页内容。有关性能和流畅度的更多指导说明,请参阅网页应用开发最佳实践。
WebView堆栈的各层
下图展示了WebView代码堆栈的各层。
Vega WebView架构图
- WebView核心组件: 以下一组核心组件提供了一系列API,其可在WebView窗口中解析和渲染网页内容。
- 媒体堆栈: 提供硬件加速访问权限的操作系统API。它还可以包含平台的片上系统 (SoC) 和板级支持程序包 (BSP) 支持的软件音频和视频解码器,用于对帧进行解码。
- DRM: 处理数字版权管理 (DRM) 许可证和密钥的API。该API使用解码器组件对ARM Trust Zone或可信执行环境 (TEE) 中的帧解密。
- 图形: 为网页内容和媒体渲染提供表面和次表面的API。
- 键盘: 为WebView提供屏上键盘的服务。
- 应用框架: 提供生命周期管理器、程序包管理器、事件管理器等的框架。
- Chromium: Chromium网页引擎,针对Vega进行了优化。该引擎负责解析和渲染网页,包括HTML、CSS和JavaScript网页。
- 用户界面框架 支持反应式编程风格的跨平台工具包,这种编程为声明式编程风格,类似于React。该框架允许组件开发者通过公开跨平台API抽象来与操作系统 (OS) 级API表面进行交互。
- 原生Vega WebView组件: 一个用C++编写的组件,可为开发者启用WebView。
- React Native WebView API: 亚马逊和您的适用于Vega的React Native应用之间的软件接口。
- 适用于Vega应用的React Native: 开发者创建的应用。
使用WebView模板开始构建
开始构建应用的最佳方式是使用WebView模板,该模板已经配置好并且可以自定义。要使用WebView模板,请参阅构建您的应用。选择“Create Vega Project”(创建Vega项目)后,键入“WebView”,然后选择WebView模板。 还可以选择按照以下说明操作,将WebView手动添加到现有Vega项目。手动添加WebView
步骤1:将WebView依赖项添加到package.json
步骤2:添加应用模板
步骤3:将所需的服务添加到manifest.toml文件中
步骤4:在App.tsx文件中导入并使用WebView组件
WebView属性
有关WebView组件属性的完整列表,请参阅Vega WebView组件参考。支持的媒体格式
Vega网页应用支持以下音频和视频格式:支持的音频格式
- FLAC
- MP3
- Opus
- Vorbis
- AAC
- PCM 8位无符号整数
- PCM 16位有符号整数小端
- PCM 24位有符号整数小端
- PCM 32位浮点数小端
- PCM 16位有符号整数大端
- PCM 24位有符号整数大端
- PCM μ-law
- PCM A-law
- AAC-LC
- AAC-SBR
- AAC-PS
- AAC Scalable (MPEG-2)
支持的视频软件格式
- Theora
- MPEG4 Part 2
支持的视频硬件格式
- VP8
- VP9
- H.264
- H.265
对数字版权管理 (DRM) 的支持
WebView目前支持Widevine和PlayReady。Widevine对视频支持HW_SECURE_ALL,对音频支持SW_SECURE_CRYPTO。PlayReady对视频支持SL3000,对音频支持SL2000。
检查设备是否支持DRM内容
WebView支持硬件DRM(Widevine L1和PlayReady SL2000/3000)和软件DRM (Widevine L3)(只要设备支持)。要检查DRM的可用性,网页应用可以使用requestMediaKeySystemAccess方法。
使用注意事项
- 配置中的robustness字段决定了所查询的DRM级别。对硬件支持的DRM使用
HW_SECURE_ALL,对软件DRM使用SW_SECURE_CRYPTO。硬件不支持音频,因此对音频内容使用SW_SECURE_CRYPTO。 - 如果设备不支持请求的DRM配置,则promise会拒绝。
- 检查硬件和软件DRM级别,然后根据可用性正常回退。
不支持的功能和已知限制
不支持的功能
- 地理位置
- 文件上传或下载
- 多行文本框
- 启动外部浏览器
- .mov文件
- 广告ID
- WebGPU
已知限制
- 弹窗功能受限——仅支持使用JavaScript
alert()或<select>下拉元素的弹窗。不支持window.open()等通用弹窗方式。

