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.
- Fixed an issue on Android where registering a content protection integration would fail.
- Added support for THEOplayer 8.0.
- Deprecated Jitpack.io in favor of the THEOplayer Maven repository on Android.
- Fixed an issue on iOS where the initial
duration
property of the player would be0
instead ofNaN
.
- Added THEOlive source integration type to
SourceDescription
. - Added THEOads as
AdIntegrationKind
. - Added a
headers
property toTypedSource
. The player will add the headers to the HTTP requests for the given resource.
- Modified the poster behavior on iOS and Android to remain visible until the first frame is displayed.
- Fixed an issue on Android where the notification background would be displayed in low resolution on recent Android versions.
- Added support on iOS for 'album' and 'artist' in the nowPlayingInfo.
- Added shouldResumeAfterInterruptions to the BackgroundAudioConfiguration which toggles playback resume after an interruption (e.g. phone call) on the lockscreen.
- Added the option to set a nil source on the iOS Bridge, to 'unset' the previous source.
- Added the fast-forward & rewind buttons for the Android notification when
mediaControl.mediaSessionEnabled
is set totrue
. - Added a
mediaControl.convertSkipToSeek
player config property to allow seeking with theNEXT
andPREVIOUS
media buttons. Its default value isfalse
.
- Fixed an issue where the Lockscreen showed enabled controls when the player has no valid source.
- Fixed an issue on Android where the notification would not disappear when setting an undefined source.
- Replaced the
MediaBrowserService
with a regularService
to facilitate background playback on Android.
- Fixed an issue on tvOS where native cache functionality was not excluded correctly resulting in build errors.
- Added ActiveQualityChanged event support for iOS.
- Fixed an issue where on iOS a cached asset would not play when setting the tasks's source on the player.
- Fixed an issue where on iOS the createTask method (CacheAPI) was not returning the created task.
- Fixed an issue where on iOS the Ad and AdBreak protocols where extended in the underlying native SDK and required some modifications.
- Fixed an issue where on Android the native module preparation would fail due to a change in the Android SDK 7.8.0 on eventDispatching.
- Added
'root'
as an alternative id for the root div element in Web applications, supporting fullscreen presentation mode in Expo-based apps. - Added
renderingTarget
property toTHEOplayer
API for Android, enabling the option to choose between either rendering to aSurfaceView
(default) orTextureView
.
- Lowered the required node version to v16+.
- Added ad event support for custom SSAI integrations.
- Fixed an issue where the Cast API wouldn't be initialized yet when in the
onPlayerReady
callback. - Added support for THEOplayer Android v7.6.0.
- Added support for
SourceDescription.poster
for Android & iOS. - Made the intervals for the forward and backward skip buttons on the iOS lockScreen configurable.
- Added preferredPeakBitRate and preferredMaximumResolution to ABRConfiguration for iOS
- Disabled skip forward/backward remote control buttons by default for Live content on Android TV platforms.
- Added support for React Native 0.74 and upgraded the example application to depend on
react-native-tvos
0.74.1.
- Fixed an issue where on the iOS bridge the wrong value was extracted from the CachingParameters to configure the bandwidth setting on the MediaCache.
- Added
resize
player event enabling monitoring of player resizes. - Added
width
andheight
properties toTHEOplayer
containing the player's current dimensions in pixels. - Added the possibility to set the player volume on iOS programmatically via the player API.
- Added
AD_CLICKED
,AD_TAPPED
,AD_ICON_TAPPED
andAD_ICON_FALLBACK_IMAGE_CLOSED
ad events for Android platforms.
- Fixed an issue on Android where the
scheduledAdBreaks
list did not include the pre-roll ad on play-out of a Google DAI stream.
- Fixed an issue where the selectedAudioTrack and selectedVideoTrack were not in sync with the actual selected mediatracks on the native player.
- Fixed a build issue on tvOS example app due to the deprecated
prepare
method.
- Added multiple configuration options to
GoogleImaConfiguration
for both iOS and Android. These map to the corresponding IMASettings from the underlying native Google IMA SDKs. - Added
skipForwardInterval
andskipBackwardInterval
properties toMediaControlConfiguration
for Android and Web, enabling configurable skip intervals for media sessions. - Added ios bridging code to make 'forced' property available from native iOS TextTrack API.
- Removed support for the web-based native iOS SDK on the RN iOS Bridge.
- Fixed an issue where the player had the wrong layout in fullscreen presentationMode, after changing the source.
- Fixed an issue where not enabling autoplay would explicitly pause the stream, reverting a possible play() request right after setting up the source.
- Added support for THEOplayer native SDK 7.0.
- Aligned SDK major version with native player SDKs.
- Raise minimal ios deployment target to 13.4, to match react native 0.73's minimal deployment target
- Fixed a crash on iOS when playing an IMA Ad after reparenting the THEOplayerView to a different native Viewcontroller.
- Downgraded default
androidx.core:core-ktx
dependency version to support Android target sdk 33.
- Updated ios sdk version to 6.12.1
- Updated dependencies and example app to support ReactNative v0.73.
- Updated ios sdk version to 6.11
- Improved NowPlayingInfo updates for iOS by setting playbackRate on pause/playing events and processing the final info on player desctruction.
- Fixed an issue with misinterpretation of
targetVideoQuality = 0
(use video track withuid == 0
) astargetVideoQuality = undefined
(use ABR across all video qualities). - Fixed an issue where the
srclang
property of atextTrack
passed to aSourceDescription
would not be parsed on Android.
- Added an optional
THEOplayer_reparent_on_fullscreen
build property on Android to disableTHEOplayerView
reparenting when transitioning to fullscreen presentation mode.
- Never pause play-out when losing audio focus while playing an advertisement.
- Bumped google-cast-sdk dependency to v4.8.0 for iOS.
- Reduce audio volume (duck) on Android when another app gains transient audio focus and ducking is allowed. In other cases the player will pause, and optionally resume if the audio focus loss was transient.
- Fixed an issue on iOS where the lockscreen controls and displayed asset metadata would remain visible after the player has been destroyed.
- Fixed an issue on iOS where the castState was not initialized correctly.
- Renamed native modules to avoid name collisions with external packages.
- Added
adbreakbegin
andadbreakend
events for Google IMA on Android. - Added
liveOffset
property toPlayerConfiguration
, allowing to set a custom offset from the live point. - Added a second, alternative config filename to the iOS podspec setup to prevent a react-native-theoplayer module resolving clash.
- Fixed a dependency issue on iOS when using chromecast or Google IMA features.
- Added fullscreen presentation mode support for iOS and Android. More info on the documentation page.
- Fixed a build issue on the iOS bridge caused by the deprecated DispatchDispatch protocol.
- Fixed an issue on Android where the
MediaPlaybackService
would sometimes crash with aForegroundServiceDidNotStartInTimeException
exception.
- Added the ability to override both small and large notification icons in Android with
ic_notification_small
andic_notification_large
resources respectively.
- Added the ability to toggle
keepScreenOn
on Android. By default, screen timeout is disabled while the player is visible.
- Fixed an issue in the Expo plugin for Android where it would fail to execute when no properties are passed.
- Take the Kotlin Gradle plugin version from the root project, if specified.
- Added
ui
configuration object toPlayerConfiguration
to configure the ads UI language. - Added support for Android 14.
- Added Expo plugin to support Android dependency configuration.
- Changed the Android notification channel name to
Notification channel
. It can be renamed by defining thenotification_channel_name
resource string.
- Fixed an issue on iOS & Android where timestamps in ad events were not consistently defined in seconds.
- Fixed an issue on tvOS where unknown AdIntegrationKind values resulted in build issues.
- Fixed an issue on Android where a
ContentResumeRequested
ad event was never broadcasted. - Fixed an issue on iOS where the ad duration was provided in milliseconds instead of seconds.
- Extended event dispatching mechanism with broadcast functionality.
- Fixed an issue on Android where
EnterCue
andExitCue
text track events did not contain thetrackUid
property.
- Fixed an issue on iOS and Android were selecting an audio, video or text track that has a
uid
with value0
, would fail.
- Added support for HLS #EXT-X-DATERANGE timed metadata tags. The tags appear as cues in a dedicated text track with type
daterange
.
- Revised audio focus protocol on Android. When resuming an app, audio focus is retrieved only if the player is not paused.
- Changed the behaviour of the Android component supporting background playback. It is stopped but not disabled when setting
backgroundAudioConfiguration.enabled = true
.
- Fixed an issue on Android where during play-out of a locally stored media asset the
seekable
property would not update. - Fixed an issue on iOS where the error was not forwarded to theoplayer if a drm request fails on the iOS bridge
- Fixed an issue on Android where compilation would fail when depending on player SDK 6.2.0.
- Fixed compilation issues caused by Caching API not being supported on tvOS
- Fixed sourceDescription processing on iOS for offline playback.
- Added support for THEOplayer 6.0. See THEOplayer's changelog for details.
- Bumped minimal version for SideloadedTextTracks connection on iOS to v6.1.1 which contains fix for iOS 17.0.
- Added
MediaCache
API, enabling download of media assets for offline playback.
- For iOS, added a subtitlePTS property to the TextTrackDescription that syncs a sideloaded textTrack with the video content.
- Upgraded the iOS side-loaded text track connector.
- Fixed an issue where the Android mediaSession connector would still process media button events when the app was in the background, and
enableBackgroundPlayback
was false. - Fixed an issue on Android where play-out would still start when the app was put to the background during initial buffering, and
enableBackgroundPlayback
was false. - Fixed an issue on Android where the MediaButtonReceiver would crash the app when it did not find a registered MediaBrowserService instance, when setting
enableBackgroundPlayback
to false while backgrounding the app.
- Fixed an issue on Android where the MediaButtonReceiver would crash the app when it did not find a registered MediaBrowserService instance.
- Added support for side-loaded metadata tracks on iOS.
- Fixed an issue where setting a new source on iOS, during DRM handling, would crash the application due to unsafe array access by different threads.
- Fixed an issue on Android where the player SDK dependency could resolve to version 6.+.
- Fixed an issue on iOS where the player integration dependencies could resolve to version 6.+.
- Added an
AnalyticsDescription
property toSourceDescription
to configure additional source-specific properties for analytics connectors. - Added support for sideloaded webVTT and SRT texttracks on iOS.
- Added Audio Focus for Android, pausing play-out on audio focus loss and resuming play-out once focus has been regained.
- Added Audio Focus and Audio Becoming Noisy manager for Android.
- Fixed an issue on Android that would cause the player not to reset when setting an empty source.
- Fixed an issue where a text track cue was not properly removed from the cue list on a TextTrackEventType.REMOVE_CUE event.
- Fixed an issue on tvOS that allowed the user to pause a CSAI ad using the apple remote control.
- Fixed an issue on iOS where the cue event listeners were not cleanup up when destroying the player instance, resulting in memory build-up.
- Added DAI support through iOS Native pipeline, using new THEOplayerGoogleIMAIntegration functionality
- Added
TextTrackStyle
API for iOS and Android.
- Fixed an issue on Android where the player would sometimes crash when requesting the current active video track.
- Switched to 'displayIconUri' in sourceDescription.metadata as primary field for artwork selection in NowplayingInfo/MediaSession, 'poster' in sourceDescription is now the fallback.
- Removed the play/pause icon in the PiP window on Android while playing an ad.
- Fixed an issue on Android where the media button receiver would not accept button events in case multiple receivers are registered.
- Fixed an issue on Android where
react-native-theoplayer
would not build when depending on Android player SDK v5.6.0. - Fixed an issue on Android where a
pause
event would not be dispatched when putting the app to the background during play-out of an ad, while background playback is enabled. The ad would also restart when bringing the app back to the foreground.
- Removed restrictions on media session playback actions for AndroidTV.
- Upgraded
react-native
version of the example app toreact-native-tvos@0.71.12-0
.
- Added a
version
property toTHEOplayer
for querying theplayer
version (e.g.,'5.5.0'
) andplayerSuite
(e.g.,'2023.3.0'
) versions.
- Moved React Native UI to separate
@theoplayer/react-native-ui
package.
- Removed
react-native-theoplayer
dependencies on packages@react-native-community/slider
,react-native-google-cast
,react-native-svg
,react-native-svg-web
,react-native-url-polyfill
andurl-polyfill
.
- Added an overview of the available React Native connectors.
- Fixed an issue on Android where the background media service would crash the app in case it was started from the background.
- Fixed an issue on iOS where the delayed contentId extraction resulted in an incorrect value being passed to the license request setup.
- Added
ignoreAvailabilityWindow
property toSourceDescription.dash
for Android and Web. - Added
needsTimescaleShifting
,desiredTimescale
andforceSeekToSynchronize
properties toSourceDescription.dash
for Web.
- Fixed an issue where text track cue changes were not applied to the TextTrack's
cue
property. - Fixed an issue on Android where play-out of an MP4 stream would sometimes crash the player.
- Fixed an issue on Android where a
pause
event would not be dispatched while pausing during play-out of an ad. - Fixed an issue on Android where hardware buttons, such as
play
andpause
, were not handled anymore after toggling background audio support. - Fixed an issue on Android where the app would crash when toggling background playback while multiple
MediaBrowserServiceCompat
instances are registered.
- Improved fullscreen support to use non-native fullscreen on Safari for iPad and Mac.
- Limited the set of available media session actions on Android when an ad or live stream is playing.
- Removed pausing the stream when disabling background playback on Android.
- Approved player behaviour on iOS and Android when doing player operations such as
play
andpause
in case no source was set.
- Fixed an issue on Android where if an invalid view tag is passed to the native bridge, it would crash the player.
- Fixed an issue on Web where preview thumbnails would fail to load.
- Updated UI documentation with necessary dependencies.
- Added improved debug logging on iOS.
- Fixed an issue on Android where the
currentProgramDateTime
property ofTimeUpdateEvent
would not be formatted in milliseconds. - Fixed an issue on Android where the order of text and media tracks would change when adding tracks.
- Fixed an issue on Web where an exception would be thrown when accessing the player API after the player had been destroyed.
- Fixed an issue with Google IMA where the main content wasn't resumed after a pre-roll ended.
- Use
enum
instead of a string union forABRStrategyType
. - Changed the way artwork is fetched for NowPlayingInfo on the iOS Lockscreen, to prevent a crash caused by threading issues.
- Added an
aspectRatio
property on theTHEOplayer
instance that can be eitherFIT
(default),FILL
orASPECT_FILL
.
- Set
theoplayer
Web SDK as optional peer dependency.
- Fixed an issue on iOS and Android where cue event properties
startTime
andendTime
with valueInfinity
orNaN
were not passed correctly. - Fixed an issue on iOS Safari where switching to fullscreen presentation during an ad would not work.
- Fixed an issue on iOS Safari where an ad could be skipped during unmuted autoplay.
- Fixed a memory leak on iOS where the player would be allocated after being destroyed.
- Fixed an issue on Android where building the SDK would require IMA to be enabled.
- Changed Web media session controls to only show trick-play buttons if the player is in foreground, or
backgroundAudioEnabled
istrue
, and never for ads and live stream. - Changed Web media session controls to only show a play/pause button if the player is in foreground, or
backgroundAudioEnabled
istrue
, and never for ads.
- Added the
crossOrigin
property toSourceDescription
for requesting CORS access to content.
- Updated picture-in-picture controls on Android to include forward/rewind buttons and disabled pause button for ads.
- Fixed an issue on Android and iOS where error codes were not correctly formatted.
- Added
RetryConfiguration
onPlayerConfiguration
for Web and Android.
- Set minimum THEOplayer dependency version to 5.0.1 for Web, iOS and Android.
- Set
MediaPlaybackService
disabled by default on Android.
- Fixed invalid location of the typescript declaration file.
- Fixed an issue on Android where the player would not pause when closing the app while background playback is disabled.
- Removed
backgroundAudioConfiguration.mediaPlaybackServiceEnabled
property on Android. Disabling background playback disables the service as well.
- Released 2.0.0 version.
- Set the player container on Web to by default have a width and height not larger than the devices width and height.
- Use
enum
type forPresentationMode
,CastState
andAdIntegrationKind
. - Changed the methods of the Cast API, such as
casting
andstate
, to be synchronous. - Applied
backgroundAudioConfig
properties on Android when closing picture-in-picture window. - Applied
backgroundAudioConfig
properties on Android when showing Notifications. - Disable iOS lockscreen controls when backgroundAudioConfig is set to
disabled
.
- Added
enableMediaPlaybackService
option tobackgroundAudioConfiguration
to optionally disable the MediaBrowserService that provides background audio support on Android. - Added support for the
enabled
flag ofBackgroundAudioConfiguration
for Web. - Added serviceId and contentId to NowPlayingInfo
- Feature flag extraction from custom iOS builds
- Fixed an issue on Android where the media session would become inactive when going to picture-in-picture mode, removing all transport controls.
- Fixed an issue where removing a player listener within a listener callback would sometimes result in events not being dispatched.
- Fixed an issue where the media session connector for Web would report an error when passing an Infinite duration for live streams.
- Fixed an issue on iOS where ID3 metadata content would not be correctly passed to cue instances.
- Fixed an issue on Android where the
'picture-in-picture'
permission was not checked. - Fixed an issue on Android where the aspect ratio of the
'picture-in-picture'
window could be outside the valid range. - Fixed an issue on iOS and Android where for a live stream the
duration
property of aloadedmetadata
event was not properly passed as beingInfinite
.
- Replaced deprecated systemUiVisibility code in Android's PresentationManager.
- Use
enum
types forTextTrackMode
,TextTrackType
andTextTrackKind
. - Allow go-to-live on iOS and Android by setting
currentTime
toInfinity
.
- Added a
mediaControl
property toPlayerConfiguration
to configure Media Session, Now Playing and Remote Command Center functionality across all platforms. It currently only contains a media session toggle for Web. - Added a
backgroundAudioConfiguration
property toTHEOplayer
to allow dynamically configuring background audio functionality. - Added a
pipConfiguration
property toTHEOplayer
to allow dynamically configuring picture-in-picture behavior. - Added support for background audio playback on iOS and Android.
- Added
keepScreenOn
as a default player view property on Android to keep the device awake.
- Fixed an issue where the IMA player container would be rendered collapsed on Web.
- Fixed a missing check for picture-in-picture permission on Android.
- Added media session connector for Web.
- Added
onPlayerReady
callback onTHEOplayerView
to pass aTHEOplayer
instance once it is ready for access. More info on the migration documentation page. - Added
canplay
event, which is dispatched when the player can start play-out. - Added
waiting
event, which is dispatched when the player has stopped play-out because of a temporary lack of data. - Added
nativeHandle
property onTHEOplayer
to access the native player instance on web, and view id on mobile. - Added
entercue
andexitcue
events for text tracks, which are dispatched when a cue becomes (in)active. - Added
ratechange
event, which is dispatched when the player's playback rate was changed. - Added
seekable
property onTHEOplayer
, containing the time ranges of the media the player is able to seek to. - Added
buffered
property onTHEOplayer
, containing the time ranges of the media the player has currently buffered. - Added
buffered
property to the payload of theonprogress
event. - Added
duration
,seeking
,preload
,textTrack
,videoTracks
andaudioTracks
properties toTHEOplayer
. - Added
libraryLocation
property toPlayerConfiguration
to allow passing custom location for web workers. - Added
mutedAutoplay
property toPlayerConfiguration
to allow autoplay on web browsers with different autoplay policies. - Added mode
hidden
as a value for a text track'sTextTrackMode
property, which is typically used for metadata tracks. - Added
TextTrackStyle
API to support text track styling. This feature is currently supported on web only. - Added support for 'picture-in-picture' presentation mode. More information on the documentation page
- Added
muted
state involumechange
event payload. - Added media session connector for Android.
- Added public accessor on the
THEOplayerRCTView
that exposes the underlying iOSTHEOplayer
instance. So you can use the underlying THEOplayer from other packages.
- Moved all player properties such as
paused
,muted
andvolume
, fromTHEOplayerView
component toTHEOplayer
instance. More info on the migration documentation page. - Removed
onEventName
callback methods fromTHEOplayerView
component in favor ofTHEOplayer
event listener's interface. More info on the migration documentation page. - Changed documentation sample code to reflect API changes.
- Exposed the
activeQuality
of aMediaTrack
as aQuality
instance instead of the quality'suid
. - Set the default container style for web to let the player cover the whole container.
- Removed
seek
method onTHEOplayer
. It is replaced with acurrentTime
setter. - Removed
fullscreen
setter and getter in favor ofpresentationMode
.
- Fixed an issue on Android where an exception is thrown when an empty source description would be passed.
- Fixed the Webpack configuration in the sample application to copy web workers to
libraryLocation
. - Fixed an issue on web where in case multiple player instances are created, the players would overlap.
- Fixed an issue on iOS Safari where switching to fullscreen presentation would not work.
- Fixed an issue on Android where passing an invalid empty source description would result in a crash.
- Fixed an issue on Android where the
framerate
property of aVideoQuality
instance would not be filled in. - Fixed an issue on iOS where the
TextTrackMode
property of a text track would be incorrect. - Fixed an issue on iOS where after enabling/disabling a text track, metadata tracks would be set to
disabled
as well. - Fixed missing
volumechange
events on mobile platforms. - Fixed an issue on iOS where after toggling the mute state during an ad playout, succeeding mute toggles had no effect.
- Fixed an issue on Android where the
pause
event was not dispatched during play-out of an ad.
- Added a
videoAspectRatio
property on theTHEOplayerView
for iOS and Android. - Added a
PlayerEventTypes.WAITING
event that is dispatched when play-back stops due to lack of media data.
- Fixed an issue on Android where building the SDK would fail when depending on player SDK v5.x.
- Fixed an issue on Android where building the SDK would fail when depending on player SDK v4.12.0.
- Restructured iOS bridge code to extensions based on features.
- Fixed an issue on Android where the system UI would not be restored when unmounting THEOplayerView with
fullscreen
enabled. - Fixed an issue with the availability of the cast button and play buttons in the example application.
- Fixed an issue on iOS where the player was not destroyed correctly on the iOS bridge.
- Added support for
DRMConfig
throughSourceDescription
for SSAI sources on iOS.
- Support for Chromecast and Airplay.
- Fixed an issue where moving the sender app to the background while playing a DAI source on an Airplay device, would pause playback.
- Upgraded Web SDK to v4.6.0.
- Updated the custom build setup to support both iOS and tvOS.
- Fixed an issue on tvOS where a feature flag was incorrectly used for ads-related code.
- Fixed an issue on Android where the player would consider unusable custom drm integrations.
- Fixed missing kotlin classpath property on Android.
- Support for content protection integration (DRM connectors).
- Support for subscribing to ad events.
- Support for Google DAI ads.
- Support for Google IMA ads.
- Support for ABR configuration on Android and Web.
- Support for video quality selection on Android and Web.
- Fixed an issue where the player would not be correctly released when destroying the view on Android.
- Fixed a warning during debugging when a stream would have duration INF or NaN.
- Fixed an issue in the example app where it would not be possible to select a specific text track.
- Fixed conflicting npm dependencies in the example app.
- Improved source handling for iOS.
- Fixed jitpack.io repository url for Android.
- Fixed an issue where play-out of HLS streams would fail on Android.
- Excluded folders from bob build config.
- Upgraded gradle versions for Android.
- Fixed disabling all debug logs for iOS/tvOS release builds.
- Fixed duration from seconds to milliseconds on iOS/tvOS.
- Support for DRM pre-integrations on Android.
- Support for additional source properties on Android:
liveOffset
,hlsDateRange
,timeServer
andhls
.
- Fixed an issue on iOS where subtitles upon disappearing would sometimes leave a thin black line on the image.
- Fixed an issue on iOS where the player would not be destroyed after going to fullscreen.
- Improved determination of the stream source type on Android.
- Fixed an issue where the app would crash due to the configured Flipper version.
- Fixed duplicate classes issue for Android when having dependencies on local libs folder.
- Fixed documentation feature matrix.
- Fixed duration scale in loadedmetadata event properties for Web.
- Fixed a crash when removing text tracks event listeners on iOS.
- Fixed a number of broken links in the documentation.
- Removed unused files.
- Initial release.