Supported Capabilities with App-only Integration (VSK Fire TV)
Supported capabilities for app-only integrations are listed here.
- Supported Capabilities Overview
- RemoteVideoPlayer Capabilities
- PlaybackController Capabilities
- SeekController Capabilities
- ChannelController Capabilities
- Alexa.KeypadController Capabilities
Supported Capabilities Overview
When you report your apps capabilities (in Step 5: Report Your App's Static Capabilities or Step 6: Report Your App's Dynamic Capabilities, you describe the capabilities in a JSON object in a text file stored in res/raw
in your Android project. These capabilities are referenced with code either in your manifest (for static capabilities) or in your DynamicCapabilityReporter
class (for dynamic capabilities).
In your capabilities text files, the capabilities
array can have a list of objects that each contain an interface
, type
, version
, and supportOperations
properties. More detail about the supported interfaces are provided in the following sections.
RemoteVideoPlayer Capabilities
Including Alexa.RemoteVideoPlayer
as a capability indicates that your app can support directives from the RemoteVideoPlayer
interface, which includes two possible operations: SearchAndPlay
and SearchAndDisplayResults
. These operations allow users to search and play video content. For example, users can say "Alexa, watch Breaking Bad" (SearchAndPlay
) or "Alexa, search for Breaking Bad" (SearchAndDisplayResults
). You can specify which directives you support.
Example:
{
"type": "AlexaInterface",
"interface": "Alexa.RemoteVideoPlayer",
"version": "3.1",
"configurations": {
"operations": [
"SearchAndPlay",
"SearchAndDisplayResults"
],
"catalogs": [
{
"type": "VIDEO_INGESTION_IDENTIFIER",
"sourceId": "<INSERT PARTNER ID>"
}]
}
}
The operations
array is an optional field to declare support for only certain operations, e.g., SearchAndPlay
but not SearchAndDisplayResults
.
Starting at version 3.1 of Alexa.RemoteVideoPlayer
, a catalogs
object must also be provided. The value for catalogs
is an array containing objects with two properties: type
and sourceId
. The values are as follows:
Field | Description | Data Type |
---|---|---|
catalogs optional |
Specifies the catalog for your app. This array contains objects with two properties in each object: type and sourceId .
|
Array |
type optional |
Set the value as VIDEO_INGESTION_IDENTIFIER .
|
String |
sourceID optional |
Set the value to your Partner ID. The Parter ID is the Partner field in your CDF file, which you customized during catalog integration.
Example: |
String |
Currently, Fire TV gets your catalog mapping through a backend process that maps your ASIN with your catalog (hence the step about submitting to Live App Testing (LAT)). However, in the future, Fire TV will get your catalog through the partner ID value you supply here.)
PlaybackController Capabilities
PlaybackController
, it's recommended that you use Android MediaSession for transport controls instead. Media sessions provides the same features with less latency and a more consistent customer experience. See Step 2: Integrate with MediaSession for details.Including Alexa.PlaybackController
as a capability indicates that your app can support directives from the Alexa.PlaybackController
interface, which is used to play, stop, and navigate playback for audio or video content. For example, "Alexa, fast forward" or "Alexa, stop."
Note that the PlaybackController
interface includes a list of operations
array specified inside a configurations
object. Allowed operations
are Play
, Pause
, Stop
, StartOver
, Next
, Previous
, Rewind
, FastForward
.
Example:
{
"type": "AlexaInterface",
"interface": "Alexa.PlaybackController",
"version": "3",
"configurations": {
"operations": [
"Pause",
"Play",
"Stop",
"Resume",
"Next",
"Previous",
"FastForward",
"Rewind",
"StartOver"
]
}
}
Other interfaces, such as Alexa.SeekController
interface, Alexa.ChannelController interface
, and Alexa.KeypadController
Interface are not yet supported with app-only integrations.
Also note that even when Alexa.ChannelController interface
is supported, instead of implementing this interface, the recommended integration for live TV feeds is through the Android TV Input Framework, as described in Introduction to Linear Television.
SeekController Capabilities
SeekController
, it's recommended that you use Android MediaSession for transport controls instead. Media sessions provides the same features with less latency and a more consistent customer experience. See Step 2: Integrate with MediaSession for details.Including Alexa.SeekController
as a capability indicates that your skill can support directives from the Alexa.SeekController
interface, which is used to allow the user to navigate to a specific position on the media timeline.
For example, "Alexa, fast-forward 60 seconds" or "Alexa, skip back 5 minutes" (as opposed to "Alexa, fast-forward" or "Alexa, rewind"). (If your app can only fast-forward or rewind a media item, not seek to another point in the timeline, implement the PlaybackController
interface instead.)
Example:
{
"type": "AlexaInterface",
"interface": "Alexa.SeekController",
"version": "3",
"configurations": {
"operations": [
"AdjustSeekPosition"
]
}
}
ChannelController Capabilities
ChannelController
interface, it's recommended that you follow the Live TV integration instead. Live TV integration offers more benefits, such as integration on Fire TV's "Live" tab and channel guide. Live TV integration is the recommended approach for Fire TV partners.Including Alexa.ChannelController
as a capability indicates that your app can support directives from the Alexa.ChannelController interface
, which is used to change or increment the channel for an entertainment device. For example, "Alexa, change the channel to PBS."
Example:
{
"type": "AlexaInterface",
"interface": "Alexa.ChannelController",
"version": "3",
"configurations": {
"operations": [
"ChangeChannel"
]
}
}
Alexa.KeypadController Capabilities
Including Alexa.KeypadController
indicates that your app can support directives from the Alexa.KeypadController
Interface, which is used to scroll right or left, up or down, or select a widget in focus.
For example, "Alexa, scroll right." Follow the code example above to list the keys
that your video skill supports. key
values include the following: UP
, DOWN
, LEFT
, RIGHT
, SELECT
, PAGE_UP
, PAGE_DOWN
, PAGE_LEFT
, PAGE_RIGHT
, INFO
, MORE
.
Example:
{
"type": "AlexaInterface",
"interface": "Alexa.KeypadController",
"version": "3",
"configurations": {
"operations": [
"SendKeystroke"
]
}
}
The Alexa.KeypadController
interface is the only interface that includes a keys
property.
By default, Fire TV provides in-app scrolling and selection as described in In-App Voice Scrolling and Selection. If you don't indicate capability support for the KeypadController
interface in your Alexa.Discovery
response, the VSK falls back to the default in-app voice scrolling and selection functionality.
However, if you do indicate capability support for the KeypadController
interface, then the default in-app voice scrolling and selection functionality is turned off. The only scrolling and selection that will occur is through your response to the KeyStroke
directives that your app receives.
When you declare support for KeypadController
, you list the keys
that your video skill supports: UP
, DOWN
, LEFT
, RIGHT
, SELECT
, PAGE_UP
, PAGE_DOWN
, PAGE_LEFT
, PAGE_RIGHT
, INFO
, MORE
. If you declare support for any key
commands, Alexa assumes you are managing actions for all of the key
commands. In short, you cannot declare support for some key
commands but not others. As an example, if you don't declare UP
, Alexa will still send keystroke
payloads with UP
values. The default in-app voice scrolling and selection won't kick in to compensate for the unsupported UP
functionality.
Last updated: Oct 29, 2020