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
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
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.
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.
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
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.
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.
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.
Added the ability to set custom parameters to FreeWheel and IMA ad configurations, so that publishers can target their campaigns better. Please refer to the FreeWheel and IMA sections for the examples of usage.
Added the ability to customize Look-Ahead HLS buffer time. Please refer to this section for the example.
Introduced a separate version of the SDK for Amazon tablets. The ExoPlayer is replaced with its Amazon fork. It can be accessed through Maven. Please refer to the Amazon section for more details.
Fixed an issue where the player fails to seek forward if seek performed during IMA ad request
Fixed an issue where RelatedPluginEvents.OnRelatedCloseListener cannot be imported
Fixed an issue where IMA preroll causes endless buffering if playback is started before an MP4 video started buffering.
Fixed an issue where the player overlaps cue points for IMA mid-rolls with the relative offset for playlists
Fixed an issue where Ad Duration displays 6## instead of actual data in case of VAST mid-roll
Fixed an issue where the player crashes if its size is 0 and VPAID ad is loaded
Fixed an issue where getDuration() and getPosition() return -.001 for live streams
Fixed an issue where a pre-roll shows incorrect duration in case of using startOnSeek