媒体应用的一般要求
Vega上的媒体直播应用要想通过亚马逊应用商店的认证,则必须满足以下一般准则和要求。
应用进入后台时释放媒体播放器资源。
当生命周期管理器 (LCM) 将应用转移到后台时,应用必须释放未使用的媒体资源,特别是与媒体播放相关的资源。这里的一般准则是,对于视频点播 (VOD) 内容播放,应用必须释放媒体资源,并返回电影或内容详情页面。当应用恢复到前台时,为了让用户能够从停止播放处快速恢复播放,应用应保留直播和VOD内容播放的上下文。
应用可以通过反初始化VideoPlayer
或从渲染树中卸载Video
组件来释放媒体资源。
await shakaPlayer.detach();
await videoPlayer.deinitialize();
await shakaPlayer.unload();{}
await shakaPlayer.destroy();
有关检测当前状态的信息,请参阅VegaAppState。
编解码器选择
- 基于音频设备功能的编解码器选择
应用必须选择合适的音频编解码器(AAC或Dolby)进行播放,具体取决于所连接的HDMI显示设备(例如电视或AVR)的音频功能。
- 在蓝牙耳机和HDMI输出之间切换
在播放过程中,用户可能会在蓝牙耳机和HDMI输出之间切换。这可能会导致显示设备上支持的音频编解码器发生变化。例如,HDMI输出支持Dolby,而蓝牙耳机不支持。应用需要检测音频输出功能的这种变化,并在MSE播放器中切换音频编解码器。
强制执行顺序播放模式
一般建议您使用顺序播放模式来播放HLS和MPEG2TS直播内容。
如果需要在HLS自适应流中播放MPEGTS内容,请启用顺序模式标志,如以下示例代码所示。
const initializeShaka = () => {
console.log('app: in initializePlayer() index = ', nextContent.index);
if (videoPlayer.current !== null) {
player.current = new ShakaPlayer(videoPlayer.current, playerSettings);
}
if (player.current !== null) {
player.current.load(content[nextContent.index], AUTOPLAY);
player.current.player.configure('manifest.hls.sequenceMode', true);
}
清单要求
要正确支持媒体播放,必须在manifest.toml文件中包含以下条目。
[wants]
[[wants.service]]
id = "com.amazon.mediametrics.service" # 对于指标服务为必需
[[wants.service]]
id = "com.amazon.media.server"
[[wants.service]]
id = "com.amazon.gipc.uuid.*"
[[wants.service]]
id = "com.amazon.media.playersession.service"
[[wants.privilege]]
id = "com.amazon.devconf.privilege.accessibility" # 对于隐藏式字幕必需
[[wants.service]]
id = "com.amazon.mediabuffer.service"
[[wants.service]]
id = "com.amazon.mediatransform.service"
[offers]
[[offers.service]]
id = "com.amazon.gipc.uuid.*"
要将音频功能用于播放,必须在manifest.toml文件中请求以下音频管理服务:
- com.amazon.audio.stream - 适用于所有播放/录制客户端
- com.amazon.audio.control - 适用于所有AudioManager API客户端
- com.amazon.audio.system - 适用于所有AudioManager API客户端
[[wants.service]]
id = "com.amazon.audio.stream"
[[wants.service]]
id = "com.amazon.audio.control"
[[wants.service]]
id = "com.amazon.audio.system"
安全视频解码器会话的限制
第一款基于Vega OS的Fire TV仅支持一个安全视频解码器实例。为了实现连续流畅的安全视频播放,您必须在初始化第二个videoPlayer
实例之前,先释放(反初始化)第一个videoPlayer实例。
如果您不释放(反初始化)第一个videoPlayer
实例,则第二个播放将失败。
以下代码示例显示如何释放(反初始化)VideoPlayer
实例并启动一个新实例。
// 开始第一个安全视频播放。
// 初始化视频播放器
let videoPlayer1 = new VideoPlayer();
await videoPlayer1.initialize();
// 现在开始播放。完成后,释放(反初始化)播放器。
// 卸载JS播放器
// 释放(反初始化)视频播放器。等待promise对象
await videoPlayer1.deinitialize();
// 在释放(反初始化)第一个安全视频播放后,开始第二个安全视频播放。
// 初始化视频播放器
let videoPlayer2 = new VideoPlayer();
await videoPlayer2.initialize();
// 现在开始播放。完成后,释放(反初始化)播放器。
// 卸载JS播放器
// 释放(反初始化)视频播放器。等待promise对象
await videoPlayer2.deinitialize();
Last updated: 2025年9月30日