as

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

Vega频道集成

Vega频道集成

要将Vega频道集成到您的Fire TV应用中,您需要了解以下事项。Vega频道接口提供与模式无关的API,用于播放线性电视内容。这可以通过遥控器(Fire TV EPG/启动器)、触摸、语音(例如对支持Alexa的设备说:“Alexa,收看......”)或者投射来完成。

先决条件

  • 访问您的Fire TV应用的源代码。
  • 支持此集成的Fire TV设备。请咨询您的亚马逊联系人,获取当前支持的设备类型列表。
  • Vega电子节目指南 (EPG) 提供方集成。

集成步骤

步骤1: 在应用中包含必要的程序包依赖项

package.json文件中添加以下依赖项。

已复制到剪贴板。

  "dependencies": {
    "@amazon-devices/kepler-channel": "^1.1.0",
  }
  • kepler-channel程序包中包含了适用于Vega频道接口的API,供您在应用中实现。

步骤2: 更新您的清单文件

更新manifest.toml文件,加入对Vega频道的支持。请参阅以下Vega示例应用。

已复制到剪贴板。

[components]
## 定义应用的交互组件(如果尚不存在)
[[components.interactive]]
id = "<程序包ID>.main"
runtime-module = "/com.amazon.kepler.keplerscript.runtime.loader_2@IKeplerScript_2_0"
launch-type = "singleton"
categories = ["com.amazon.category.main", "com.amazon.category.kepler.media"]

[[extras]]
## “interface.provider”指定一个组件,
## 该组件提供特定接口的实现
key = "interface.provider"
## 声明提供接口实现的组件。
## 此组件必须在 [[components.interactive]] 下定义并
## 在其类别中的包含“com.amazon.category.kepler.media”。
component-id="<程序包ID>.main"

[extras.value.application]
## 声明支持Vega频道
[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IChannelServer"
features = ["ChannelList"]

有关为主要交互组件添加的两个类别的详细信息:

  • com.amazon.category.main将组件声明为应用程序包的默认交互式组件。
  • com.amazon.category.kepler.media将组件声明为Vega媒体操作的目标。

有关更多信息,请参阅清单 [components] 部分

清单文件声明支持com.amazon.kepler.media.IChannelServer接口。为“interface.provider”定义的组件<程序包ID>.main处理所有频道命令回调。有关更多信息,请参阅步骤3和4。

正确的接口定义示例

清单中的每个接口定义都必须是单独且独立的。不要混合来自不同接口的属性。以下是定义多个接口的正确方法示例。

已复制到剪贴板。

[extras.value.application]
## IChannelServer接口
[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IChannelServer"
features = ["ChannelList"]

## IContentLauncherServer接口
[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IContentLauncherServer"
attribute_options = ["partner-id"]
[extras.value.application.interface.static_values]
partner-id = "<合作伙伴ID>"

接口定义不正确的示例

下面是一种不正确的方式。请不要这样做。

已复制到剪贴板。

[extras.value.application]

[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IContentLauncherServer"
attribute_options = ["partner-id"]

[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IChannelServer"
features = ["ChannelList"]

[extras.value.application.interface.static_values]
partner-id = "<合作伙伴ID>"

步骤3: 为Vega频道接口创建处理程序对象

创建包含Vega频道接口实现的处理程序:

已复制到剪贴板。

import {
  ChannelServerComponent2,
  ChangeChannelStatus,
  IChannelHandler,
  IChangeChannelResponse,
  OperationError,
} from '@amazon-devices/kepler-channel';

/**
 * 实现Vega频道接口的处理程序
 */
const channelTunerHandler: IChannelHandler = {
  async handleChangeChannel(
    channelIdentifier: string,
  ): Promise<IChangeChannelResponse> {

    /**
     * 此处${channelIdentifier}的值将包含
     * 来自Vega EPG提供方的ChannelDescriptor.Identifier字段的数据
     *(如果在EPG引入期间提供了该字段)。
     */

    // 在此处添加调谐到${channelIdentifier}所需的业务逻辑。

    const response = ChannelServerComponent2.makeChannelResponseBuilder()
      .status(ChangeChannelStatus.SUCCESS)
      .build();
    return Promise.resolve(response);

  },

    /**
     * 不应使用handleChangeChannelByNumber,而是应改为实现和使用handleChangeChannel
     */
  async handleChangeChannelByNumber(
    majorNumber: number,
    minorNumber: number,
  ): Promise<IChangeChannelResponse> {
    throw new OperationError(
      '不应使用handleChangeChannelByNumber,而是应改为实现和使用handleChangeChannel',
    );
  },

  async handleSkipChannel(
    channelCount: number,
  ): Promise<IChangeChannelResponse> {

    // 添加处理跳过频道所需的业务逻辑

    const response = ChannelServerComponent2.makeChannelResponseBuilder()
      .status(ChangeChannelStatus.SUCCESS)
      .build();
    return Promise.resolve(response);
  },
};

步骤4: 将处理程序对象提供给ChannelServer,以便可以引用它

在交互组件中添加类似如下所示的代码:

已复制到剪贴板。

// 使用内容库中最新的ChannelServerComponent2
import { ChannelServerComponent2 } from '@amazon-devices/kepler-channel';
import {
  IComponentInstance,
  IKeplerAppStateManager,
  useKeplerAppStateManager,
} from '@amazon-devices/react-native-kepler';

const keplerAppStateManager: IKeplerAppStateManager = useKeplerAppStateManager();
// 获取组件实例
const componentInstance: IComponentInstance = keplerAppStateManager.getComponentInstance();

React.useEffect(() => {
 // 向频道服务器提供给定组件实例的处理程序。
 ChannelServerComponent2.getOrMakeServer().setHandlerForComponent(channelTunerHandler, componentInstance);
 }, []);

很好! 您已经完成Vega频道的集成,它应该可以接收命令了。


Last updated: 2025年9月30日