as

Settings
Sign out
Notifications
Alexa
Amazon Appstore
AWS
Documentation
Support
Contact Us
My Cases
Get Started
Design and Develop
Publish
Reference
Support

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,
    • Non-adaptive 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:

      Copied to clipboard.

      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 the same DRM key be reused for both audio and video streams?
    • For security reasons, we only support using same CDK for audio and video when the video security requirements allow decryption to non-secure memory for example: Widevine's equivalent of L3 requirements: SW_SECURE_CRYPTO, SW_SECURE_DECODE and even HW_SECURE_CRYPTO that allows SW_SECURE_DECODE at the same time. Playready: SL150 FairPlay: Not supported
  • What happens if same DRM key is used for L1 (i.e. 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 same CDK. Audio MUST use different CDK in this scenario.
  • Is there an equivalent to ExoPlayer's multiSession with same key in Shaka Player?
    • In DRM there are 2 ways in which CDKs can be requested and managed:
      1. Handle a single CDK per DRM session. This means that if a media asset has audio and video where both are encrypted, Client applications will need to create separate DRM sessions for audio and video even if they share the same CDK. This means multiple license exchanges will occur for a single playback session.
      2. Handle all CDKs with a single DRM session. Exoplayer documentation states that this 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.
  • How to resolve Shakaplayer DRM license http request failing with DRM_LICENSE_REQUEST_FAILED error.

    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.

    Copied to clipboard.

      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 customer headers.
          request.headers["header"] = "data";
          */
          }
      };
    
  • Which JS based players are supported in Vega?

    Shaka Player, Hls.js and DASH.js (Open Source) and Bitmovin, THEOPlayer and Brightcove (Proprietary) are supported in Vega. 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. Shaka Player is used to demonstrate the usage of this API. We release patches to Shaka Player, which are required for this purpose. 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 being actively developed. You can choose any Shaka Player version as per your requirement. For information on the latest version of Shaka Player for which patches are released, see Play adaptive content (HLS/DASH) with Shaka Player. Developers can refer to the patches released by us and port them (if required). If you need a specific version of Shaka Player for which we haven't provided one, you can refer to the patches we supplied 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 and every new version of Shaka Player.

  • What is the license under which Shaka Player patches are released?

    Shaka Player patches are released under the Apache License 2.0.

  • What audio/video codecs are supported by W3C Media API?

    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?

    Some of the common permissions required for media playback use cases are listed below. Based on your use case, missing permissions can lead to playback not starting or a black screen being displayed.

    Copied to clipboard.

      [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.

    Widevine L1 (secure path) for audio is not supported on any Amazon platformw. Audio should use non-secure path, while video can use secure. Append multikey=true to the URL to use separate keys for each track.

  • Which Closed Captions/Subtitle formats are supported?

    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. Closed Captions/Subtitle are supported 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 preffered way to parse captions in a Vega app. To disable in-band caption parsing by Shaka Player, unregister the media segment captions parsers.

    Copied to clipboard.

      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_ALL robustness value for audio is not supported. To decrypt and decode audio and video use the MediaKeys object.

    When requesting a MediaKeySystemAccess object using requestMediaKeySystemAccess(...) make sure that the robustness member for audioCapabilities and videoCapabilities in the MediaKeySystemConfiguration dictionary is properly set. 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 non-secure buffers.


Last updated: Sep 30, 2025