JW Player 8 is our fastest and easiest-to-use player to date. This major release debuts a completely redesigned, mobile-optimized user interface that can easily be customized to brand your player. JW8 features smart content preloading and a smaller embed script, so viewers never see a buffer wheel and experience faster page loads. To continue to offer publishers industry-leading support, we now officially support Facebook Webview and VAST 4, and have deprecated Flash.
Release Date: January 17, 2018
Fixed an issue with DRM streams using FairPlay, where skipping to the next playlist item resulted in a fatal error.
Release Date: December 18, 2017
Fixed an issue in the Google Analytics Pro plugin where older types of GA embeds were not working.
Release Date: December 14, 2017
Added support for the most recent Google Analytics embed type, gtag.js. Older types of embeds are still supported.
The player now marks events sent to Google Analytics nonInteraction: true if they were not manual viewer interactions. This enhancement increases bounce rate accuracy.
Improved the design and interaction of the discovery and playlist overlay in small players, making it our most accessible overlay yet. The overlay now supports swipe interactions and keyboard shortcuts, making it easy to navigate between items. You can page through the list of items either by swiping left or right on touch devices or using the keyboard’s left or right arrows. The overlay can be closed using the escape key. Finally, you can tab through all the elements in the overlay and interact with them using the enter key.
Improved the user experience with new Discover and Playlist headings, which provide context for the discover and playlist overlays. The headings and the tooltips for the overlay’s icon in the control bar can be customized in a setup block with localization.related and localization.playlist.
Improved the autoplay experience on mobile by showing controls when playback starts. Previously, viewers could not control the video until they unmuted the video by tapping an icon in the lower right corner of the screen. Now, the mute icon will still appear in the corner when controls fade away, but tapping on the screen brings up the controls immediately.
Added the ability to localize the “Loading Ad” message for IMA and FreeWheel plugins.
Added the ability to set the number of allowable redirects in IMA above the default for cases like header bidding.
For FreeWheel, added a new configuration option customadunitname that allows for specifying the SLAU query parameter for each ad break.
Fixed a bug where DRM protected content could not play after non-DRM protected items when using .load().
Fixed an issue where live streams would not fall back to a backup stream when the first variant could no longer be played.
Fixed a bug causing content to scale improperly on Edge 16 with the HTML5 provider.
Fixed an issue causing some page styles to bleed into the playlist overlay.
Fixed a bug where the poster image would not display on audio-only playlist items.
Fixed an issue in HLSjs causing a loop when parsing null characters in ID3.
Fixed an issue with the VAST plugin where the player could hang when a VPAID JS tag returned a Flash creative when using HLS
Fixed a bug in the VAST plugin where the error pixel might not fire if no ad response was received
Resolved an issue where controls=false was being overridden when certain VPAIDs ended
Fixed an issue with the VAST plugin where skipping multiple midrolls using %s rather than specific offsets could cause playback to start from the beginning.
Release Date: November 29, 2017
Added a callback, onXhrOpen, which can be used to set custom XHR headers in HLSjs for AES-protected HLS streams. The callback gets executed after an XMLHTTPRequest is initialized and before the request is sent. withCredentials is unaffected by this change. If configured, it gets set before onXhrOpen is called. Refer to our configuration reference for implementation details.
Fixed an issue with the VAST plugin where the player could hang when a VPAID JS tag returned a now Flash creative when using HLS.
Fixed a bug in the VAST plugin where the error pixel might not fire if no ad response was received.
Resolved an issue where controls=false was being ignored when certain VPAIDs ended.
Fixed an issue with the VAST plugin where skipping multiple midrolls set using %s rather than specific offsets could cause playback to start from the beginning.
Release Date: November 16, 2017
Expanded HLSjs usage to Android Chrome, where it is now the default for HLS playback. This makes the HLS experience more feature rich and includes support for 608 and in-manifest VTT captions, as well as improved playback stability and support. HLS.js usage can be disabled by setting hlsjsdefault to false, which will result in the player using native Android HLS playback.
Improved our Discover recommendations engine by reducing the likelihood of a viewer seeing a repeat of videos they’ve already seen either by choice or via auto-advance. Items that are manually clicked will not be recommended again for 10 minutes, and items that are automatically advanced will be excluded for one hour.
Updated the requestTimeout configuration option to apply to the IMAad plugin, where it previously only applied to VAST.
Fixed an issue where some captions did not appear properly center-aligned.
Fixed a bug where audio-only videos did not display the poster image if set to autostart.
Fixed a bug where the poster image would not be visible when calling load().
Fixed an issue causing playback to stall when an empty child manifest is selected. After a failed attempt to play a quality, the player now will remove the quality option from the quality menu.
Fixed a bug causing the colors in 360 videos to appear inverted on iOS devices.
Fixed an issue with autostarted players when Safari 11’s “Never autoplay” setting is enabled. Ads now correctly play after user interaction.
Fixed an issue where the buffer icon would display during IMA fullslot ads.
Fixed an issue where the IMA timeout aderror was not firing correctly in certain scenarios.
Release Date: November 8, 2017
All player editions using JW8 now support all HLS functionality, including AES encryption and 608 captions. DRM support remains an Enterprise-only feature.
To reduce clutter and avoid confusion, the JW Player build number has been removed from the right click menu. It was previously displayed for all non-production versioned players.
Fixed an issue where VTT Japanese and Korean subtitles in HLS streams did not display in Chrome.
Fixed an issue where certain HLS streams stalled and could not recover quickly when the quality menu was set to auto.
Fixed a bug where control bar-only mode players were missing the live icon during live streams and did not display control bar-positioned logos, if configured.
Fixed a bug where the right click menu would appear outside of the player when right clicking on a menu item or center display icon.
Lowered the threshold for when the max volume icon would display in the control bar to 75% volume, instead of 100%.
Fixed an issue where setting a window color for 608 captions did not apply the style to the entire window, but rather only to the right of the captions. The player’s renderer is now used in all browsers except Safari. This gives us more granular control of the way captions are displayed. If you prefer to continue using native rendering in Chrome, you can do so by, setting renderCaptionsNatively to true in your player configuration.
Fixed a bug where there was no visual feedback that the player was buffering after seeking when using Safari on iOS devices.
Fixed an issue where the controls would never hide during content playback after the ad ended when using vpaidcontrols:true.
Fixed an issue where VAST “progress” tracking pixels weren’t firing.
Fixed a timing issue with VAST events - they now correctly fire the “started” event when the VPAID AdVideoStart event fires, rather than firing “started” when we get the impression event from the VPAID.
Release Date: October 18, 2017
Updated the default player size to 640px wide x 360px high.
Upgraded hls.js to version 0.8.4, which enhances the stability of HLS playback in the player and improves HLS stream support.
The player will now show a center display icon when the player pauses itself due to a failed attempt to play the video, providing more visual indication to the viewer that they need to manually hit play again. This is especially helpful in response to Safari 11, where autoplaying videos with sound are automatically paused on playback unless the user has changed the default browser setting.
Added the Cardboard mode icon to the idle state, so that when available, viewers can enter 360 mode before starting the video in Android Chrome.
Added the ability to instantiate a player and immediately begin playback from a click on an element. By calling setup() followed by play(), the user interaction on the element is propagated all the way through to the instantiated player, eliminating the need to interact with the player to start playing media after it’s setup.
Improved handling of player asset loading so that users get feedback more quickly when a plugin, component, or non-essential asset fails to load. In the case of non-fatal errors, the player will attempt to recover gracefully. If a required component fails to load, the player will fail to setup and the user will be notified within 20 seconds.
Separated the core player to make our embed script significantly smaller, shaving off more than 100kb that no longer needs to be loaded and parsed before the player is set up.
Updated the preload behavior so only the first player on the page or viewable players preload when preload is set to anything other than none.
Improved the preload: metadata setting so that the player loads the manifest and buffers a maximum of one segment of media for HLS and Dash streams. MP4 streams load metadata only.
Improved preload: auto so that the player loads the manifest and buffers approximately 30 seconds of media. MP4 streams load based on browser behavior when the preload: auto attribute is set.
Updated the default preload configuration to do preload: metadata when preload is not set.
Included the Skip button in the vpaidcontrols configuration’s functionality for the VAST plugin.
Included the duration present in the VAST XML on the adImpression event.
JW8 dropped support for VAST 1 as it has been deprecated by the IAB and has extremely low usage and a high risk of causing ad errors.
Added MediaFile compliance metadata from VAST4 tags to Vast plugin API events, including the reason the tag was not compliant.
Updated our Vast plugin to support playback of VAST 4 ad tags.
The following VAST 4 metadata has been added to Ads API events: UniversalAdID, Categories, ConditionalAd, as well as compliance with IAB guidelines on MediaFile setup.
Added support for m3u8 MediaFiles in ad tags in our Vast plugin.
JW8 does not support JW7 license keys. JW Platform-hosted JW8 players will automatically have JW8 keys. For self-hosted players: Your JW7 license key will still work with your JW7 player embeds, but it will not work with JW8. All existing accounts will provide both JW8 and JW7 versions of the license key. To update these to use JW8, download the player zips from your account dashboard, update the license key on your pages, and replace the url to JW Player with the new location where you are hosting JW8. New accounts will only have access to JW8.
HLS, DASH, 360, and casting are now all supported in all editions of the player, including the Free edition.
The recommendations plugin is no longer supported in the Premium edition.
YouTube and RTMP formats are no longer supported in the player.
Removed the Flash provider from the open-source jwplayer project. Flash is no longer supported in JW Player and is only used to play HLS streams in IE11 on Windows 7.
Added a getEnvironment() API method, which provides an object containing all browser and operating system information decomposed from the user agent.
Deprecated the primary configuration option. Flash can no longer be defined as a primary provider. The player will choose the appropriate provider based on the environment it's in and the media type.
Deprecated all jwplayer().onEventName events, Browser/OS util methods and player constants that follow the pattern JWPLAYER_*.
Deprecated the ability to toggle the state simply by calling play() or pause(). This change makes play and pause behavior more predictable in the API. Going forward, calling play() while media is playing does nothing, as does calling pause() when the player is already paused.
Changed the configuration options and API for using playback rate controls. In JW8, playbackRateControls is a boolean that toggles the visibility of playback rates in the global menu. playbackRates, a new optional config property, accepts an array of numbers which overrides the default playback rate options of 0.5, 1, 1.25, 1.5, and 2. This improves upon the first iteration of the feature, released in 7.12, where playbackRateControls controlled both the menu’s visibility and custom playback rates. This change is backward compatible and will not affect JW7 players upgraded to JW8.
Created a backward compatibility script so that custom code written against deprecated API functionality will continue to work when a JW7 player is updated to JW8.
User Interface Improvements
The control bar now uses flexbox, which simplifies the DOM structure and css. Icons are no longer grouped in left, center, and right divs.
Consolidated all control bar icons that had their own menus into a single settings menu, accessible via the gear icon in the control bar. This includes quality, audio tracks, captions and playback rate controls. Captions still has a dedicated icon in the control bar for accessibility reasons. The sharing menu has also been added to the settings menu. Like captions, sharing has a dedicated control bar icon that opens the settings menu to the sharing sub-menu.
Removed webfont-based icons and replaced them with inline SVGs. The following icons have been redesigned for JW8: live, quality, buffer, error, and rewind 10 seconds.
Changed all dock icons from being positioned in the upper-right corner to the control bar. The addButton API now adds buttons to the control bar. These buttons will be added to the right of the logo if the logo is present in the control bar.
Improved the timeslider behavior so there’s a visual indication when a user hovers or scrubs to a new playback position. We’ve also increased the touch target to make it easier to engage with the timeslider on touch devices.
Leveraged the timeslider as a progress indicator during ad playback by making it visible and positioning it below the control bar icons.
Added 11 new skin customization options in JW8. If supplied, the three customization options that were available in JW7 (skin.background, skin.inactive, skin.active) will map to the new options in JW8. Note that there’s no mapping to the new skin.timeslider.rail option.
Deprecated all JW7 skins. JW8 debuts our all-new default skin featuring a transparent control bar, tooltips, and a modern interface, which carry over to ads and audio only modes.
Added tooltips that appear on hover or focus over any icon in the settings menu, which increases clarity for viewers.
Improved support for keyboard navigation in JW8. Users can tab to advance through buttons and menu options in the player, and use the enter key in lieu of a click to take action on any focused item. The escape key can be used to close overlays and menus.
Added a new logo position option, control-bar, which places the logo in the control bar with an optional clickthrough link. Note: currently, all logos in the control bar render in a square container. A future release will support rectangular logos.
Deprecated the timeSliderAbove configuration option since it will be the only layout in JW8.
Updated the default logo margins to be 20px from the sides of the player.
Added maximum dimensions for logos. The height or width of a logo will not exceed 15% of the player’s height or width. The player will dynamically resize logos to fit within the height and width constraints so as to not obstruct the video.
Fixed an issue where the copy button in the sharing menu linked to a JW Player content preview page instead of the page where the player is embedded. This only occurred when no custom URL is provided in the player configuration. If a custom URL is provided, that link will be copied instead.
Fixed an issue where the player only returned one subtitle track in Safari when multiple are present in the HLS manifest.
Fixed a bug where HLS streams skipped ahead and incorrectly reported the position after a discontinuity in Chrome and Firefox.
Fixed an issue where HLS streams paused or stalled when automatically upshifting quality in Chrome and Firefox.
Fixed a bug where the casting icon would not appear in the control bar on autostarting players with pre-roll ads.
Updated the FreeWheel plugin to time-out quicker when it’s blocked by an adblocker.
Fixed an issue in the Vast plugin where content might not start after a VPAID ad was skipped.
Fixed an issue in the Vast plugin with VPAID clickthrough where the player was ignoring playerHandles=false, which resulted in both the player and the ad opening tabs, rather than just the ad handling the clickthrough action.
Affected Beta and RC Versioned Players Only
Fixed an issue where free edition players would not play HLS streams in Flash.
Fixed an issue where the control bar faded when focused on, preventing keyboard navigation.
Fixed an issue with players in audio-only mode where custom colors would only appear once playback begins, and would set up with the default colors.
Fixed a bug where controls were hidden when a player had casting configured in audio-only mode.
Fixed an issue where the error icon did not appear on setup errors.
Fixed an issue where rectangular logos positioned in the control bar were resized to fit within 24px square dimensions. The player will now resize logos positioned in the control bar to occupy a max width of 44px and a max height of 24px, which is consistent with the height of other control bar elements.
Ads are once again supported in Platinum edition players, remedying their erroneous removal from prior 8.0.0 beta releases.