Known Issues and Workarounds - Amazon IVS

Known Issues and Workarounds

  • When playing recorded content (also known as VOD) on an iOS mobile browser (e.g. Safari or Chrome), seeking backwards will mute the player.

    Workaround: Call player.setMuted(false) after seeking.

  • When playing recorded content on an iOS mobile browser, seeking backwards works intermittently when directly selecting the desired position.

    Workaround: Drag the seek bar to the desired position.

  • When playing recorded content on an iOS mobile browser, player.seekTo() calls do not consistently work.

    Workaround: Set currentTime on the video HTML element after the loadeddata event. For example:

    videoEl.addEventListener('loadeddata', () => { videoEl.currentTime = 30; // seek 30s from the beginning });
  • When playing a live stream or recorded content on an iOS mobile browser, captions may not be rendered in different sizes and may be re-rendered multiple times.

    Workaround: None.

  • When playing a live stream or recorded content on an iOS mobile browser, player.getQualities() calls do not return the list of available qualities.

    Workaround: None. The player supports only auto-quality mode on iOS browsers.

  • When native HTML5 controls are enabled, calls to setQuality() are ignored.

    Workaround: Disable HTML5 controls before calling player.setQuality().

  • When playing a muted live stream on an iOS mobile browser, player instability (e.g., black or frozen screen, buffering) may be seen when resuming an inactive player tab (e.g., tab switches or device lock/unlock).

    Workaround: Use the JavaScript Page Visibility API to detect page visibility changes and then take action on the player accordingly. For example:

    //if client platform is iOS if (!!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform)) { document.addEventListener(“visibilitychange”, () => { if (document.visibilityState === “hidden” && player.isMuted()) { player.pause() if (document.visibilityState === “visible” && player.getState() != PlayerState.PLAYING) { player.play() } }) }