Latest Releases JW Player JW Platform iOS SDK Android SDK FireOS SDK


Google DAI support

Monetize your live or VOD content with Google IMA Dynamic Ad Insertion (DAI) in our Android 3.12.0 release! Visit our developer documentation for more details on how to get started.


Release Date: March 16, 2020 (Build 94)



FreeWheel improvements and more!

Android 3.11 is packed with some great updates! We have exposed HLS #EXT-X-DATERANGE tags that can be used to indicate when there are temporal breaks in a live stream—great for ad stitching. Speaking of advertising, we upgraded and made improvements to our FreeWheel ad client.


Release Date: February 14, 2020 (Build 93)


  • Upgrade FreeWheel ad support to version 6.32.0
  • Added support for playlist-level configuration of FreeWheel where the freewheelSettings can now be nested within an individual PlaylistItem. Use case descriptions and a code sample can be found here
  • Added post-roll ad support in the FreeWheel ad client
  • Added a new callback for In-Playlist Timed Metadata, which supports DATERANGE and PROGRAM-DATE-TIME tags. The DATERANGE and PROGRAM-DATE-TIME metadata events fire when playback enters the section of an HLS stream tagged with #EXT-X-DATERANGE or #EXT-X-PROGRAM-DATE-TIME.


  • Fixed an issue where onVisualQuality is not called when a stream automatically changes bitrate


Add buttons with custom callbacks


Release Date: December 20, 2019 (Build 92)


  • Added addButton() and removeButton() API methods allowing developers the ability to add or remove player buttons to the player control bar. When new buttons are added via the addButton() API method, they can call back to developers' custom native code.
  • Upgraded Android SDK to use JW Player 8.11.8
  • Updated order of play events.
  • Exposed creativeAdId and creativeID in the AdImpressionEvent payload for Google IMA ads.


  • Fixed issues with misaligned vertical and horizontal webVTT captions that use cue positioning
  • Fixed an issue where duplicate captions appear for playlist items that contain both side-loaded and in-stream 608 captions
  • Fixed issue where streams with IcyInfo metadata cause player crash


ExoPlayer upgrade


Release Date: December 10, 2019 (Build 88)


  • Maintenance release


Release Date: November 15, 2019 (Build 81)


  • Upgraded ExoPlayer dependency to version 2.10.6
  • Exposed Freewheel adBreakStart, adBreakEnd, and adViewableImpression events


  • Fixed issue where calling pauseAd() when using Google IMA did not pause ads
  • Fixed issue where creating a new player during playback crashes the app


Google IMA Library Update and New Friendly Ad Obstruction API

We have created a new Friendly Ad Obstruction API class that can be used to ensure ad viewability is properly calculated by the Open Measurement SDK when using Google IMA.


Release Date: October 16, 2019 (Build 78)


  • Upgraded to Google IMA Android version 3.11.3
  • Added JWFriendlyAdObstructions API class to replace the now deprecated JWExperimentalAPI class that enables the registration of video controls that overlay the media element. Typically, these video controls are considered obstructions and reduce the viewability rate calculated by the Open Measurement SDK. More information on how to use the JWFriendlyAdObstructions API can be found here
  • Expose the adId parameter in the AdImpressionEvent for Google IMA
  • Improved the user experience by retaining the paused state after a viewer seeks while paused. Developers who have worked around this in the past by calling pause() on seek no longer need to use the API, but anyone who wishes to resume playback automatically after a seek event now must call play()


  • Fixed an issue where changing quality levels would pause playback in fullscreen if using multiple MediaSources as pseudo quality levels.


Version 3.7.0


Release Date: September 25, 2019 (Build 77)


  • Fixed issue where an IllegalStateException is thrown after a video plays 128 times or more


Release Date: August 16, 2019 (Build 76)


  • Exposed nextupOffsetPercentage property which allows the next up overlay to be displayed at a specified percent of the way through the video, rather than at a fixed number of seconds from the beginning or end of the video. When the nextupOffsetPercentage is set, it overrides nextupOffset


Enhanced Fullscreen Handling

Our latest Android 3.6.0 release adds more flexibility to our Android SDK with enhanced fullscreen handling. The JWPlayerView now automatically detects if it is running in a RecyclerView or not and uses the appropriate handler to ensure a seamless fullscreen user experience.


Release Date: June 20, 2019 (Build 73)


  • Improved Android fullscreen handling for RecyclerView and non-RecyclerView configurations. The JWPlayerView will detect whether or not it is running a RecyclerView and will use the appropriate handler allowing for a seamless fullscreen user experience.
  • Upgraded SDK to use JW Player 8.8.6

Known Issue

  • Freewheel ads may restart when user enters or leaves fullscreen mode during playback. This does not cause multiple Freewheel ad impression pings to be sent and will not affect ad reporting.


Chromecast Improvements

Enjoy a new and improved Chromecast experience in Android 3.5! We have migrated to the latest Google Cast library unleashing more customizable options. See our Chromecast documentation for implementation details.


Release Date: May 21, 2019 (Build 72)


  • Fixed an issue where developer is unable to disable fullscreen on rotation when using JWSupportFragment.
  • Fixed an issue where SharingPluginEvents are not available for use.


Release Date: April 29, 2019 (Build 71)


  • Added a new "Experimental API" class that enables the registration of video controls that overlay the media element. Typically, these video controls are considered obstructions and reduce the viewability rate calculated by the Open Measurement SDK. Learn more about Google IMA’s Open Measurement SDK integration and how to register video controls overlay obstructions here.
  • Improved JW Player expired license user experience by adding an error message notification and halting player setup or playback
  • Added onWarning callback for non-fatal error debugging or troubleshooting purposes.


  • Fixed issue where video content restarts from the beginning after ad playback if two midrolls are scheduled for the same time position.
  • Fixed issue where video is shortly displayed before IMA VMAP preroll in playlist.
  • Fixed issue where Google IMA ads play with sound when the advertising player configuration is set to mute.
  • Fixed issue where the app crashes if related items file is not found.
  • Fixed issue where players with Chromecast buttons using Fragments lose connection to a casting session.
  • Fixed issue where the title and image are not available for playlists with related videos during a casting session.
  • Fixed issue where the parent video is casted when the user selects a related video.
  • Fixed issue where audio plays on the sender app when the casting session starts and a VAST or Freewheel ad is already in progress.

Known Issue

  • Intermittently Freewheel pre-roll VPAID ads continue to load after ad completion and prevent video playback to start. This issue will be fixed in the next Android release.


Release Date: Mar 14, 2019 (Build 70)


  • Upgraded SDK to use JW Player 8.7.3
  • Upgraded to Google IMA version 3.10.6 which includes IAB’s Open Measurement SDK that enables third-party viewability and verification measurement for ads served to mobile and desktop environments.
  • Migrated the Chromecast implementation to the latest Google Cast library (version 16.1.2). Please refer to the Chromecast documentation for implementation details.


  • Fixed an issue where some VPAID ads continue playing in background after having been skipped
  • Fixed an issue where spinner shows during content playback after VPAID ad
  • Fixed issue where player controls do not automatically hide during video playback if user clicks the pause button and then the play button after the completion of a VPAID ad
  • Fixed an issue where onAdComplete event does not fire for FreeWheel VPAID ads
  • Fixed an issue where onPause event does not fire on Android 5.1 if playback is interrupted by external actions such as phone call
  • Fixed an issue where a playlist with IMA VMAP would not switch to next items automatically
  • Fixed issue that prevents localized error messages
  • Fixed an issue where onAdRequest does not fire for the first ad instance starting from the second ad pod or when inline IMA VMAP ads are used
  • Fixed an issue where ad instances within one ad pod are missing controls when configured using IMA VMAP
  • Fixed an issue where only one onAdRequest fires for an IMA VMAP ad pod with multiple instances
  • Fixed an issue where the replay button shows before IMA VMAP post-roll
  • Fixed an issue where FreeWheel ad with relative offset plays as a pre-roll for the second playlist item or after video replay
  • Fixed an issue where AdRequestEvent does not have an offset parameter when ad is manually requested during video playback
  • Fixed an issue where callbacks fire only for the first ad instance in an ad pod