All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Position alignment for VTT subtitles
- Default selection not highlighted in AudioTrackListBox and SubtitleListBox
- Clear subtitles list when source is unloaded
- Support for regions in VTT subtitles
- UI hiding when actively using seek or volume slider
- Empty background boxes with TTML subtitles on Chromecast
- Web Content Accessibility (WCAG) 2.0
- Keyboard controls for sliders when focused
onActive
andonInactive
not fired for rootSettingsPanelPage
whenSettingsPanel
was configured withhideDelay
of-1
- Automatic opening of the first select box when the
SettingsPanel
becomes visible on iOS devices
- UI flickering back and forth on live streams after ads
- Build errors when using the npm package
- Outdated live asset sample
- Localization
DurationChanged
event support
- Hide UI even a element in
ControlBar
is currently hovered
- Do not hide
SettingsPanel
inmodernSmallScreenUI
automatically
- Support for regions in TTML subtitles
- Thumbnail preview support for live streams
- UI no longer hides in
Prepared
,Paused
orFinished
state
- Ads UI not being hidden when the Player is unloaded during ad playback
PlaybackTimeLabelMode.RemainingTime
to display the remaining time of the content
- Improved documentation about time / number formats which can be used in
AdMessageLabel
placeholders - TypeScript update to 3.4.5
- Improved generic type inheritance of
Component
Config
s (#74)
- Incorrect calculation of
SettingsPanelPage
dimensions in transition animation - Navigation for more than two
SettingsPanelPage
s
- Support for player instances which inherits from the
BitmovinPlayer
ListBox
no longer recreates itself after the list was updated
- UI not hiding after selecting an item within a
ListBox
- Allow npm package to be imported in server side app without
navigator
error
- Wrong state for live indicator when a
startTime
value is provided within theSourceConfig
of the player
- Crash of
UIContainer.release
when initialized withhideDelay: -1
- AirPlay icon does not change into active state
- Dispatch last event of a rate-limited event sequence to
Event.subscribeRateLimited
listeners
- Inaccurate time within
SeekBarLabel
on seek preview
simple.html
to test plain UI CSS without Bootstrap
- Stopping timeshift offset updater of
SeekBar
when player is destroyed box-sizing
style ofSeekBar
andSeekBarLabel
UIContainerConfig.userInteractionEventSource
to allow tracking of user interaction events (which toggle the visibility of certain components like theControlBar
) on a custom element
- Avoid unnecessary updating of hidden
AdSkipButton
- Upgrade to Gulp 4 (#208)
- Default UI does not show any UI variant during an ad without UI requirement
- Support for
VideoQualityAdded
,VideoQualityRemoved
,AudioQualityAdded
,AudioQualityRemoved
events inAudioQualitySelectBox
/VideoQualitySelectBox
- Updated advertising UI support for player 8.1
- CSS selectors for all
SelectBox
components VolumeController
to control and manage volume and mute state by multipleComponent
s in a single placedisable()
/enable()
functionality toComponent
s- Preventing click event on a disabled
Button
- Advertising UI support
UIConditionContext.adRequiresUi
to distinguish if the current ad requires an external UI
UIConfig.playbackSpeedSelectionEnabled
is nowtrue
by default (as it was before v2.17.0)
- Deprecated
UIConditionContext#adClientType
as it's no longer supported by player v8
- Handling of
null
keys inSelectBox
(fixes subtitle deselection in IE11) - Unintended start of playback while scrubbing on seekbar
VolumeToggleButton
interfered player APIsetVolume
/mute
/unmute
calls
- Customization of output naming via CLI parameters (see
outputnames
ingulpfile.js
)
- Improved
Button
hit-boxes by changing margins to paddings Seekbar
/VolumeSlider
position markers changed from SVG to pure CSS to improve vertical alignment with barTimeout
rewritten for better efficiency
- Uncaught
PlayerAPINotAvailableError
inSeekBar
position updater when player is destroyed - Unresponsive UI when a user canceled connection establishment to a Cast receiver
- Avoid unnecessary animation when
BufferingOverlay
is hidden - Avoid unnecessary DOM modification when the text of a
Label
does not change - Positioning of
SettingsPanelPageOpenButton
in some browsers Timeout
could not be cleared from within the timeout callback function
- Positioning of
SeekBar
/VolumeSlider
markers improved - Crash of
UIManager.release
when player instance was already destroyed
Major release for Bitmovin Player 8, mainly adjusted to the changed player API. For player 7, please use UI v2.x.
- Support for image subtitles
- Paging support for
SettingsPanel
viaSettingsPanelPage
to enable navigation to sub-settings (#119) - Default
ErrorMessageTranslator
with english error messages for theErrorMessageOverlay
UIConfig.errorMessages
to allow customization of error messages via customErrorMessageTranslator
|ErrorMessageMap
play
andpause
calls during seeking now have the issuerui-seek
instead ofui
- Extracted/renamed
UIManager.Factory
toUIFactory
- Moved
UIConfig
,TimelineMarker
, andUIRecommendationConfig
fromuimanager.ts
touiconfig.ts
- Replaced local player type definitions with type definitions from the bitmovin-player NPM package
- Everything deprecated in 2.x
- Player v7 feature detections and compatibility fallbacks
SubtitleSettingsPanel
in favour ofSubtitleSettingsPanelPage
to use with the new navigation feature ofSettingsPanel
- Player v6 legacy skin (
skin-legacy
) and its UI variants - Disabled the ads UI variants because there is no ads module in player v8 yet that requires a UI (ads UI will be reintroduced with an upcoming release)
- Type definitions are now generated correctly and referenced from
package.json
- Update timeline markers when loading a new source
- Flickering playback position indicator when switching to a live-stream
2.18.0 (2018-08-08)
- UI element
ListBox
to display multiple selectable items (#121) - Icon for subtitles
- Icon for audio tracks
- Demo section within the UI variants in the playground
- Demo with separate
SettingsPanel
s for subtitles and audio tracks UIContainerConfig.hidePlayerStateExceptions
option to configure player states in which the controls will not be hidden
- SmallScreenUI: Move
RecommendationOverlay
behindTitleBar
to avoid hiddenFullscreenToggleButton
in replay screen and prevent smartphone users from exiting fullscreen - SmallScreenUI: Do not hide controls in replay screen
2.17.1 (2018-08-01)
- Rendering of single-image thumbnails
- Local storage detection in Firefox
2.17.0 (2018-07-10)
AirPlayToggleButton
tomodernSmallScreenUI
for MacOS devicesPictureInPictureToggleButton
tomodernSmallScreenUI
for MacOS devicesUIConfig.playbackSpeedSelectionEnabled
option to show/hidePlaybackSpeedSelectBox
within theSettingsPanel
PlaybackSpeedSelectBox
is no longer visible within theSettingsPanel
by default
- Apply the IE/Firefox workaround of v2.16.0 to hide the hovered dropdown panel of a
SelectBox
also when the UI hides
2.16.0 (2018-06-27)
- Revert state of
PlaybackToggleButton
to paused if a play attempt is rejected (ON_WARNING 5008
; e.g. in case of autoplay) UIManager
API to dynamically manageSeekBar
markers:getTimelineMarkers
,addTimelineMarker
,removeTimelineMarker
(#103)- Interval marking with added property
TimelineMarker.duration
(#103) - Custom CSS classes on markers in
SeekBar
andSeekBarLabel
throughTimelineMarker.cssClasses
(#103) ListSelectorConfig.filter
to filter items of auto-populatedSelectBox
implementations, e.g.SubtitleSelectBox
(#117)ListSelectorConfig.translator
to translate item labels of auto-populatedSelectBox
implementations, e.g.SubtitleSelectBox
(#117)
- Animate
HugePlaybackToggleButton
only on state changes (not when UI is initially loaded) - Hide
HugePlaybackToggleButton
play animation whenconfig.playback.autoplay
is enabled or the player is already playing - Consolidated configuration management of
UIConfig
from components intoUIManager
- Configuration from the player source now takes precedence over the configuration passed into the
UIManager
- IE & Firefox could leave the dropdown panel of an active/hovered
SelectBox
floating after the parent container (e.g.SettingsPanel
) was hidden
2.15.0 (2018-06-08)
UIManager
API to switch UI variants:UIConfig.autoUiVariantResolve
,onUiVariantResolve
event,getUiVariants
,resolveUiVariant
,switchToUiVariant
(#102)
2.14.0 (2018-05-02)
License change from LGPLv3 to MIT.
- Subscribe to the
ON_PLAYBACK_SPEED_CHANGED
event to display the correct speed in thePlaybackSpeedSelectBox
- Prefer
on
/off
overaddEventHandler
/removeEventHandler
with player version 7.8+ to avoid deprecation log messages data-bmpui-volume-level-tens
attribute onVolumeToggleButton
for more granular styling of the volume icononClass
/offClass
configuration properties inToggleButtonConfig
to allow customizing the state marker CSS class names
- Removed
bmpui-low
marker class fromVolumeToggleButton
(replaced bydata-bmpui-volume-level-tens
attribute) - Renamed
VolumeToggleButton
mute state marker CSS class names fromoff
/on
tounmuted
/muted
- Change
VolumeToggleButton
into mute state when the player volume is set to0
(avoids transitions from zero volume to muted) - Set player volume to
10
when the player is unmuted and the volume is below10
(avoids transitions from muted to zero volume) - Removed volume level animation from
VolumeSlider
- Initialize
ToggleButton
state at UI configuration SettingsPanel
attempted to checkisActive
on non-SettingsPanelItem
components (e.g.CloseButton
)- User interaction passthrough from
HugePlaybackToggleButton
to player when autoplay is blocked SeekBar
bar levels and scrubber positioning in Android 4.4 WebView
2.13.0 (2018-03-15)
- Consistent UI's prepared state detection by only looking at the player's ready state
2.12.1 (2018-02-21)
- Flickering heights of
SeekBar
andVolumeSlider
bar indicators - "Concurrent" modification of event handlers in
EventDispatcher
when a handler is unsubscribed by a handler
2.12.0 (2018-01-22)
- Execute volume control availability test on dummy media element to prevent unexpected interference with muted autoplay
- Positioning of
SeekBar
markers was broken due to style changes in 2.11.0
2.11.0 (2017-12-22)
- Update
SeekBar
playback position of live streams with DVR window while playback is paused
- Switch off live edge indicator in
PlaybackTimeLabel
when a live stream is paused
- Stop
SeekBar
smooth playback position updates onON_PLAYBACK_FINISHED
- Centered
SeekBar
andVolumeSlider
drag handles and make sure that all layers of the underlying bar have the same height
2.10.5 (2017-11-20)
PlaybackToggleButton
now also listens toON_SOURCE_LOADED
andON_SOURCE_UNLOADED
to properly update the playback state when the source changes- Update package dependencies
- Apply CEA-608 style to subtitles before they are added to the DOM to avoid "style flickering"
- Unnecessary line breaks in CEA-608 texts
2.10.4 (2017-10-30)
- Remove
nowrap
from CEA-608 style to correctly render multiline cues PlaybackToggleButton
now also listens toON_PLAYING
in addition toON_PLAY
2.10.3 (2017-10-20)
- Handling of whitespaces in CEA-608 texts
2.10.2 (2017-10-19)
- Rewritten CEA-608 text layouting
- Greatly simplified CEA-608 CSS style (
.{prefix}-ui-subtitle-overlay.{prefix}-cea608
) - Calculate CEA-608 font size only with active CEA-608 cues
- Overlapping CEA-608 texts with large player aspect ratios
2.10.1 (2017-10-13)
- Removed
VolumeControlButton
'sVolumeSlider
slide-in animation in the legacy skin to fix the slider knob at 100% bug
- Vertical
VolumeSlider
knob in legacy skin was not visible when set to a low volume - Legacy skin's
VolumeSlider
knob was always rendered at 100% when appearing after being hidden - Avoid
ItemSelectionList
DOM recreation on item selection to avoid unexpected events (e.g.mouseenter
)
2.10.0 (2017-09-14)
- Update
AudioQualitySelectBox
/VideoQualitySelectBox
entries when the period of a source changes
- Export bundled UI (
bitmovinplayer-ui.js
) as UMD module (instead of global module)
- Fix
Uncaught TypeError
whenrequire
ing UI before player - Don't write UI into global namespace (
bitmovin.playerui
) when loaded as module withrequire
2.9.0 (2017-08-24)
- Support CEA-608 subtitle positioning
- Added
ui
issuer parameter to all applicable player API calls (seek, timeshift, mute, unmute, setVolume)
- Unified player API issuer parameter to always be
ui
instead ofui-{componentName}
- Select correct audio track after updating the items in
AudioTrackSelectBox
2.8.3 (2017-08-01)
- Use new quality change API in
AudioQualitySelectBox
andVideoQualitySelectBox
for player >= 7.3.1 (selection is now synced with player-APIset[Audio|Video]Quality
calls)
2.8.2 (2017-08-01)
Release of this version went wrong and it was unpublished from NPM.
- Fix
animate-slide-in-from-bottom
SCSS mixin (fixes missingVolumeSlider
slide-in animation ofVolumeControlButton
in the legacy skin) - Fire
ON_READY
event if UI is loaded after player is ready to initialize all components correctly
2.8.1 (2017-07-26)
- Early quality selection in
AudioQualitySelectBox
/VideoQualitySelectBox
beforeON_READY
broke players <= 7.2.5
2.8.0 (2017-07-25)
- Adds a
VolumeToggleButton
to the small screen UI
- Moved all subtitle styling to CSS (default subtitle style is not overwritten any longer)
- Fix clearing of container components with
Container#removeComponents
(fixes sticky/duplicate subtitle issue) - Fix updating container components with
Container#updateComponents
(fixes empty subtitles in IE11) - Fix handling of duplicate subtitle cues (same text at same time) in
SubtitleOverlay
(fixes another sticky subtitle issue) - Fix clearing of recommendations in
RecommendationOverlay
(fixes duplicate recommendations issue) - Reset selected value in
ListSelector
when the items are cleared - Updating selected value in
PlaybackSpeedSelectBox
when player is ready - Fix video quality options for progressive streams (removed 'auto' option, preferred quality preselected)
2.7.1 (2017-07-06)
- Throttled high-frequency API calls to the player from the
VolumeSlider
andSeekBarLabel
2.7.0 (2017-06-28)
- Add support for FCC compliant closed captions. Adds options on how captions are displayed, and a SubtitleSettingsPanel with the possibility to update the settings while playing the video.
- Add UI version property to global namespace (
bitmovin.playerui.version
) - Add
UIConfig#container
config property to specify a custom place in the DOM where the UI will be put into. Can be used to place it somewhere else beside the default player figure.
2.6.0 (2017-06-27)
- Add an option to keep the UI always visible by setting the
UIContainerConfig#hideTimeout
to -1
- Thumbnail size is no longer determined by the physical image size and can now be arbitrarily set by CSS
2.5.1 (2017-06-26)
No functional changes. Improves player API declarations, code linting configuration, and adds contribution guidelines.
2.5.0 (2017-06-13)
- Add
UIConditionContext#adClientType
to be able to switch to different UI variants for different ad types - Add
UIConditionContext#isPlaying
and resolve UI variants onON_PLAY
andON_PAUSED
to be able to switch between different UI variants for playing and paused states
- NPM entry point changed from browserified standalone distributable file to CommonJS module (NPM package can now be used with Node and Browserify out-of-the-box)
- Deprecated
UIConditionContext#isAdWithUI
, useadClientType
instead (isAdWithUI
equalscontext.adClientType === 'vast'
)
- Stop rendering loop of the
ErrorMessageOverlay
background canvas when UI is released - Fix wrapped control bar in modern skin on iOS 8.2
2.4.0 (2017-06-08)
- Resolve UI variants on
ON_READY
- Improved UI variant switching by detecting the end of an ad when loading a new source during ad playback
- Fix subtitle line breaking
2.3.0 (2017-06-01)
UI does not crash any more when used with player 7.0, all other restrictions explained in 2.0.0 still apply.
- Display subtitles in
SubtitleOverlay
with HTML markup if available instead of the plain text - Update
AudioTrackSelectionBox
on newON_AUDIO_ADDED
/ON_AUDIO_REMOVED
events in player 7.1.4 / 7.2.0
- Detect live streams and time shift availability when configuring dependent components (
PlaybackTimeLabel
,PlaybackToggleButton
,SeekBar
) to adjust their mode independently from the player state changes - Skip configuration of
PictureInPictureToggleButton
andAirPlayToggleButton
and hide the components if functionality is not supported (when used with player 7.0)
- Fix settings panel closing when an option select box is open
- Fix crash of Gulp
serve
task on HTML file changes - Fix
SeekBar
in legacy skin did not hide onhide()
- Fix missing audio track selection box in Safari with player 7.1.2 and 7.1.3
- Fix error in
SubtitleOverlay
when trying to remove an already cleared subtitle cue
2.2.0 (2017-05-05)
- Add
Container#removeComponents()
to remove all child components of a container - Display multiple subtitle cues in parallel in
SubtitleOverlay
- Add
getText()
method,isEmpty()
method, andonTextChanged
event toLabel
- Add
TitleBarConfig#keepHiddenWithoutMetadata
to keepTitleBar
hidden if metadata labels are empty
- Do not display
TitleBar
in Cast UI when it does not contain any metadata (title/description)
- Clear
SubtitleOverlay
when playback is finished
2.1.1 (2017-05-03)
- Update playback position / volume indicator position in
SeekBar
/VolumeSlider
when component is shown
2.1.0 (2017-05-02)
- Add
remote-control
marker class toUIContainer
that is applied during an active remote control session (e.g. Cast session) - Display play/pause button in smallscreen UI during an active remote control session (e.g. Cast session)
- Adjust
CastStatusOverlay
font size and remove Cast icon (makes place for the playback toggle) in smallscreen UI - Move
PlaybackToggleOverlay
overCastStatusOverlay
in smallscreen UI to enable playback toggling
- Fix hiding of
HugePlaybackToggleButton
during Cast session initialization
2.0.4 (2017-04-28)
- Add
ErrorMessageOverlayConfig#messages
to translate and customize error messages in theErrorMessageOverlay
2.0.3 (2017-04-25)
No functional changes. Fixes typo in the changelog.
2.0.2 (2017-04-25)
No functional changes. Adds a prepublish
script to the NPM package so an incomplete version like 2.0.0
cannot happen to be published again.
2.0.1 (2017-04-24)
No functional changes. Fixes an incomplete NPM package published for 2.0.0
, which has been unpublished.
2.0.0 (2017-04-24)
Version 2.0 of the UI framework is built for player 7.1. If absolutely necessary, it can still be used with player 7.0, but certain restriction apply: Casting will not work correctly due to API improvements and a removed workaround, new components based on added API calls will fail (AirPlayToggleButton
, PictureInPictureToggleButton
) and need to be removed from the default UI, seeking before playback won't work due to a removed workaround, and audio/video quality changes through the API won't be picked up by the select boxes due to misnamed events.
- Add
AirPlayToggleButton
for AirPlay support on MacOS and iOS (player 7.1+) - Add
PictureInPictureToggleButton
for picture-in-picture support on MacOS and iOS (player 7.1+) - Add dynamic switching between different UIs based on various context properties (screen size, ads, mobile, fullscreen)
- Add new
UIManager
constructor(player: Player, uiVariants: UIVariant[], config?: UIConfig)
for dynamic switching - Add new
UIManager
constructor(player: Player, ui: UIContainer, config?: UIConfig)
for simple cases with only one UI instance - Automatically display smallscreen UI on mobile devices in default modern UI
- Add new
- Read metadata (title/description) from player source config if metadata in
UIConfig
is empty - Refresh metadata when a new source is loaded into the player
- Add
release()
method to components to release resources and dependencies created duringconfigure(...)
- Add
onConfigured
event toUIManager
which gets fired once UI is ready (configured and added to DOM) - Detect illegal circular references in UI component tree and throw error
- Add
VolumeSliderConfig#hideIfVolumeControlProhibited
flag to automatically hide the volume slider on platforms which prohibit programmatic volume control (currently only iOS) - Add mouse hover-state to
Component
isHovered()
returns the current hover-stateonHoverChanged
event withComponentHoverChangedEventArgs
is fired when the hover state changes
- Add
Spacer
component that just takes up space - Read timeline markers from player source config (
source.markers
) ifUIConfig
does not contain markers - Refresh timeline markers when a source is loaded/unloaded
- Read recommendations from player source config (
source.recommendations
) ifUIConfig
does not contain recommendations - Refresh
RecommendationOverlay
when a source is loaded/unloaded - Clear
MetadataLabel
when source is unloaded - Add
SeekBarConfig#smoothPlaybackPositionUpdateIntervalMs
to configure or disable smooth playback position updates on theSeekBar
- Delay displaying of the
BufferingOverlay
by 1 second to bypass short stalls without the distraction of the overlay (configurable withBufferingOverlayConfig#showDelayMs
)
- Update Cast support for new Cast implementation in player 7.1
- Permanently display UI during a Cast session
- No more use of the player's global namespace
- Hide
ErrorOverlay
when a new source is loaded - Hide
BufferingOverlay
when source is unloaded - Do not attempt to show/hide components if they are already in the target state
- Display stop icon instead of pause icon on the
PlaybackToggleButton
for live streams without timeshift - UI is no longer hidden while a control in the controlbar is hovered
- Instead of requiring two touches to start playback, the first touch now reveals UI and triggers playback at the same time (
UIContainer
withHugePlaybackToggleButton
) - Decreased
HugePlaybackButton
,ErrorMessageOverlay
BufferingOverlay
, andSubtitleOverlay
font size in smallscreen UI - Hide
RecommendationOverlay
when source is unloaded - Listen to
ON_[AUDIO|VIDEO]_DOWNLOAD_QUALITY_CHANGE
events instead of*_CHANGED
inAudioQualitySelectBox
/VideoQualitySelectBox
(download events were broken/misnamed in player 7.0)
- Remove all transitions and animations from Cast receiver UI due to low rendering performance on Chromecast devices
- Remove Cast workarounds/hacks required for old Cast implementation in player 7.0
- Remove seek-before-play workaround (now directly supported by player 7.1)
- Remove
UIManager
constructor(player: Player, playerUi: UIContainer, adsUi: UIContainer, config?: UIConfig)
, use new constructor withUIVariant[]
instead - Disable smooth seekbar update in Cast receiver UI for increased Chromecast performance
- Fix seekbar position indicator when seeking before playback
- Fix unloading/releasing of UI
- Fix wrong volume slider / seekbar positioning on UI startup and after loading a source
- Fix missing component exports to global JS namespace
- Fix timeshift support on live streams where timeshifting is not available from the beginning
- Fix wrongly detected live state of HLS streams in Chrome on Android
- Fix seekbar position update when player is already playing at UI initialization (e.g. when autoplay is enabled)
- Fix wrong
UIContainer
playback state class when creating UI in other states than idle and prepared - Correctly initialize
VolumeToggleButton
low/high volume icon state
1.0.1 (2017-02-10)
- Fix thumbnail preview on the seekbar label
- First release