Media Player FAQ
FAQs
- What streaming formats does this version of the W3C Media API add-on support?
- HLS and DASH adaptive streaming playback through Shaka Player using MSE/EME API,
- Nonadaptive streaming formats (MP4 and MP3) playback through HTMLMediaElement.src attribute,
- Is media focus management supported?
- Yes, both on the simulator and Fire TV stick devices with Vega OS. DPAD and direct play/pause/ff/rw buttons work for transport controls.
- Can the app implement its own media controls GUI?
-
Yes, apps can implement custom media controls GUI and call APIs for play, pause and seek as shown here:
video.play(); // to resume playback video.pause(); // to pause playback video.currentTime = <seek position in seconds>; // to seek to a position like X.Y secs
-
- Can I use the same DRM key for both audio and video streams?
- For security reasons, we only support using the same SDK for audio and video when the video security requirements allow decryption to nonsecure memory for example,
Widevine's equivalent of L3 requirements:
SW_SECURE_CRYPTO,SW_SECURE_DECODE, and evenHW_SECURE_CRYPTOthat allowsSW_SECURE_DECODEat the same time. Playready: SL150 FairPlay: Not supported
- For security reasons, we only support using the same SDK for audio and video when the video security requirements allow decryption to nonsecure memory for example,
Widevine's equivalent of L3 requirements:
- What happens if I use the same DRM key for L1 (For example, HD content) video URIs?
- In the presence of HW_SECURE_ALL restrictions (a.k.a. L1 for Widevine, SL2000/3000 for PlayReady, Fairplay only operates in this mode) for video, we can support all video variants to share the same CDK. Audio MUST use different CDK in this scenario.
- Is there an equivalent to ExoPlayer's multiSession with the same key in Shaka Player?
- In DRM there are 2 ways to request and manage CDKs:
- Handle a single CDK per DRM session. This means that if a media asset has audio and video where both are encrypted, Client applications need to create separate DRM sessions for audio and video even if they share the same CDK. This means multiple license exchanges occur for a single playback session.
- Handle all CDKs with a single DRM session. ExoPlayer documentation states that doing so is the better way as it avoids multiple license exchanges.
- Shaka Player does not offer a configuration option to choose which of the previous options to use while ExoPlayer does through its "Multi-session" knob. The default mode for ExoPlayer is the second option.
- In DRM there are 2 ways to request and manage CDKs:
-
How to resolve Shaka Player DRM license HTTP request failing with
DRM_LICENSE_REQUEST_FAILEDerror.When a Shaka Player
DRM LICENSE_REQUEST_FAILED (6007)error occurs, it's possible that some servers are unable to interpret input request. To rule out this problem, append a "content-type" header in HTTP request as shown in the following sample code.const netEngine = this.player.getNetworkingEngine(); const filter = (type : shaka.net.NetworkingEngine.RequestType, request : shaka.extern.Request) :void => { if (type === shaka.net.NetworkingEngine.RequestType.LICENSE) { console.log("Appending http header for License request"); request.headers["content-type"] = "application/octet-stream"; /* If any other custom headers. request.headers["header"] = "data"; */ } }; -
Which JS based players does Vega support?
Vega supports Shaka Player, Hls.js, and DASH.js (Open Source) and Bitmovin, THEOPlayer, and Brightcove (Proprietary). Amazon releases patches to port Shaka Player, Hls.js, and DASH.js to Vega.
-
Does Amazon release patches for every new version of Shaka Player?
Vega provides a W3C Media API and uses Shaka Player to demonstrate the use of the API. To support the demonstration, we release required patches to Shaka Player. You can build your own player using the API. You are free to choose any open-source (Shaka Player, HLS.js, DASH.js etc) JS-player or any proprietary player like Bitmovin, TheoPlayer etc.
Shaka Player is in active development. You can choose any Shaka Player version as per your requirement. For information about the current patches for Shaka Player, see Play adaptive content (HLS/DASH) with Shaka Player. If you need a specific version of Shaka Player for which we haven't provided one, you can refer to the patches we supply and port them to your required version of the player. If you encounter any issues with the W3C API, report them and we will provide support in resolving the issue. Note that currently there is no commitment to release patches for each new version of Shaka Player.
-
Under what license do you release Shaka Player patches?
Shaka Player patches are released under the Apache License 2.0.
-
What audio and video codecs does the W3C Media API support?
The W3C Media API supports popular audio and video codecs used in streaming media use cases such as Dolby Audio (AC3, eAC3, AC4, EC3_JOC), AAC (LC, AAC+, and eAAC+), MP3, Opus, FLAC, and Vorbis for audio, and H.264, H.265, VP8, VP9, MPEG4, and AV1 for video.
-
Which DRM schemas does the W3C Media API support?
The W3C Media API supports DRM schemas such as Widevine (L1) and PlayReady (SL3000).
-
Is Server Side Ad Insertion Supported?
Yes, if there is no change in codec type between Main→Ad and Ad→Main content. Otherwise, no.
-
What are the permissions required for different media playback use cases?
The following lists some of the common permissions required for media playback use cases. Based on your use case, missing permissions can lead to playback not starting or display of a black screen.
[offers][[offers.service]] id = "com.amazon.gipc.uuid.*" #Required for GIPC SR [[wants.service]] id = "com.amazon.gipc.uuid." [[wants.service]] id = "com.amazon.drm.key" # Required for DRM video playback [[wants.service]] id = "com.amazon.drm.crypto" # Required for DRM video playback [[needs.privilege]] id = "com.amazon.privilege.security.file-sharing" # Required for DRM video playback [[needs.privilege]] id="com.amazon.media.secureplayback" # Required for DRM video playback [[wants.service]] id = "com.amazon.mediametrics.service" [[wants.service]] id = "com.amazon.media.server" #Required to connect to MediaPlayer/MediaTransform [[wants.service]] id = "com.amazon.mediabuffer.service" [[wants.service]] id = "com.amazon.mediatransform.service" [[wants.service]] id = "com.amazon.media.playersession.service" #Required to connect to MediaControls [[wants.service]] id = "com.amazon.inputd.service" #Required for remote button events. [[wants.service]] id = "com.amazon.inputmethod.service" [[wants.service]] id = "com.amazon.audio.stream" #Required for using the audio stream [[wants.service]] id = "com.amazon.audio.control" #Required for using Volume and Other controls -
Live content playback doesn't start for HLS MPEG2TS content in Shaka Player.
Enable sequence mode:
this.player.configure('manifest.hls.sequenceMode', true)We recommend using sequence mode operation of source buffer for MPEG2 TS streams.
-
Some WV L1 video playback is failing.
Amazon devices don't support Widevine L1 (secure path) for audio. Audio should use nonsecure path, while video can use secure. Append
multikey=trueto the URL to use separate keys for each track. -
Which Closed Captions and Subtitle formats does W3C Media API support?
The W3C Media API supports in-band and out-of-band closed captions and subtitle in CEA 608, CEA 708, TTML, WebVTT, and SRT formats. Apps are able to select the closed captions and subtitles based on language. The W3C Media API supports Closed Captions and Subtitle for URL and MSE mode playback.
-
How do I implement in-manifest captions?
For information on in-manifest captions, see the Closed Captions (CC) and Subtitles knowledge base article.
-
How do I disable in-band captions (in media segments) parsing by Shaka Player?
The W3C Media API now supports CEA608/708 caption decoding. This is the preferred way to parse captions in a Vega app. To disable in-band caption parsing by Shaka Player, unregister the media segment captions parsers.
shaka.media.ClosedCaptionParser.unregisterParser('video/mp4'); shaka.media.ClosedCaptionParser.unregisterParser('video/mp2t'); -
How do I implement client side ad-insertion?
For information on client side ad-insertion, see Sample Code for Client Side Ad-Insertion (CSAI) knowledge base article.
-
Is audio decryption supported when using Widevine L1 or Playready SL2000/3000?
Audio decryption is not supported for hardware secured memory buffers. This means that the
HW_SECURE_ALLrobustness value for audio is not supported. To decrypt and decode both audio and video, use theMediaKeysobject.When you request a
MediaKeySystemAccessobject usingrequestMediaKeySystemAccess(...), make sure that therobustnessmember foraudioCapabilitiesand you properly setvideoCapabilitiesin theMediaKeySystemConfigurationdictionary. For example, if video MUST be secure for Widevine, use'robustness' : 'HW_SECURE_ALL'and for audio ALWAYS use'robustness' : 'SW_SECURE_CRYPTO'. This makes sure that video data is decrypted using secured by hardware buffers while audio data is decrypted using nonsecure buffers.
Last updated: Feb 11, 2026

