1.17.17
Released: 08.05.2024
- iOS 17 xcPrivacy manifest added
- dependencies bumped to versions with xcPrivacy manifest
- minimum iOS version increased to 14.0
1.17.16
Released: 19.04.2024
Bug fixes
- fixed DiceSourceResolver decoding error when resolving VOD with subtitles
1.17.15
Released: 30.01.2024
New features
New player events
- new event
DorisPlayerEvent.willSeek
- new event
DorisPlayerEvent.didSeek
DorisPlayerEvent.playerItemFailed
now has an error propDorisPlayerError
with more meaningful mapping of underlying NSError- new prop
DorisPlayer.resumeRate
- new feature
DorisTracksPolicy
inDorisPlaybackConfig
that allows force specific subtitle selection for specific audio - new ssai ads provider support (Yospace)
These events now have content time and stream time as assosiated values, which can be different if video has ads where content time is stream time excluding ads duration
DorisPlayerEvent.currentTimeChanged
DorisPlayerEvent.itemDurationChanged
DorisPlayerEvent.seekableTimeRangesChanged
DorisPlayerEvent.loadedTimeRangesChanged
Breaking changes
DorisSource
api changed to include all possible source types as enumAVDorisConfig
api slightly changedDAISource
andCSAISource
removed, they are now part ofDorisSource
DorisAdsError
changed from enum to structDiceSourceResolver
removed parameter useSubtitles as airplay is now fixed on CDN level and subtitles can be safely used while airplayingDiceSourceResolverLogin
removed(combined withDiceSourceResolver
)
Bug fixes
- fixed downloaded content does not include side-loaded subtitles
- fixed airplay playback fails with side-loaded subtitles
- fixed terminated app while downloading content did not resume content on relaunch
- other minor fixes and improvements # 1.10.3 — Released: 08.06.2023
Bug fixes
- d2g fix, handle download limit with -212 error
- d2g fix, wifiOnly setting downloads not working as expected
1.9.8
Released: 22.05.2023
New features
- DorisPlayer.setPlaybackQuality(_ quality: DorisPlaybackQuality) specify video quality low/high/auto
- new corresponding player event DorisPlayerEvent.playbackQualityChanged(quality: DorisPlaybackQuality, isBandwidthLimited: Bool)
Breaking changes
- CSAISource initializer changed to CSAISource.init(contentURL: URL, preroll: String?, liveMidroll: String? = nil, textTracks: [DorisTextTrack] = []) {
Bug fixes
- d2g fix removing assets offline
- other minor bugfixes and improvements
1.7.0
Released: 27.03.2023
New features
- Added Dice Source resolvers for easier integration with Dice videos
- DiceSourceResolver Resolves DorisSource using Dice api using authToken
- DiceSourceResolverLogin Resolves DorisSource using Dice api using username and password
1.6.0
Released: 13.03.2023
Breaking API Changes
General
CSAISource initializer parameters changed to:
init(contentURL: URL, initialAdsURL: String?, adUnits: [DorisAdUnit]?, textTracks: [DorisTextTrack] = [])
DorisDrmSource initializer parameters changed to:
init(contentUrl: String, croToken: String?, licensingServerUrl: String?)
Player Events:
- DorisPlayerEvent.subtitleChanged(subtitle: DorisMediaSelection, autoSet: Bool) //added autoset option which is set to true for initial subtitle selection by player driven by master manifest file and user device preferences
- DorisPlayerEvent.audioTrackChanged(audioTrack: DorisMediaSelection, autoSet: Bool) //added autoset option which is set to true for initial subtitle selection by player driven by master manifest file and user device preferences
New features
- DorisPlayer.volume // sets player’s volume
- DorisPlayer.selectSubtitles(title: String?) //select subtitles by name
- DorisPlayer.selectAudioTrack(title: String?) //select subtitles by name
- added api to Download content through DiceShield.sharedProvider > Important: import dice-shield-ios is required to use
New DorisPlayerEvent events:
- DorisPlayerEvent.presentationSizeChanged(size: CGSize) //playerLayer video presentation size changed event
1.1.0
Released: 11.01.2023
Breaking API Changes
General
- PlayerItemSource renamed to DorisSource
- DorisSource convenience initialiser with playback URL + textTrack which will create AVPlayerItem under the hood
init(url: URL, textTracks: [DorisTextTrack] = [])
- AVDorisURLAsset removed
- *LoadRequest * removed
- removed DorisPlayerState.stopped
- DorisOutputProtocol.onError() method removed as it was only called for ads related errors, now it is one of Advertisement events -> DorisAdsEvent .errorOccured
- RemoteCommandEvent renamed to DorisRemoteCommandEvent
- AdBreakEndedData now has a payload with canContinueContentPlayback value
DorisPlayer
- func selectSubtitles(code: String) // now pass language code rather then language title
- func selectAudioTrack(code: String) // now pass language code rather then language title
- func seek(position: Double) removed
- func seek(offset: Double) removed
- func seek(_ type: DorisSeekType) //added instead of previous seek methods which were removed
Ads Events:
- AdvertisementEvent renamed to DorisAdsEvent
- DorisAdsConfig adContainerView property type changed from DorisPlayerLayerViewProtocol to plain UIView
- most of DorisAdsEvent events renamed
Renamed:
- REQUIRE_AD_TAG_PARAMETERS -> adTagParametersRequired
- AD_RANGES_CHANGED -> adRangesChanged
- AD_PROGRESS_CHANGED -> adProgressChanged
- AD_BREAK_ENDED -> adBreakEnded
- AD_BREAK_STARTED -> adBreakStarted
- AD_STARTED -> adStarted
- AD_ENDED -> adEnded
- AD_PAUSE -> adPaused
- AD_RESUME -> adResumedAD_RESUME -> adResumed
Player Events:
- DorisPlayerEvent.stateChanged(state: DorisPlayerState) removed now it is a seperate method inside DorisOutputProtocol
func playerDidChangeState(old: DorisPlayerState, new: DorisPlayerState)
- DorisPlayerEvent.currentTimeChanged(seconds: Double, date: Date?) now has date parameter for LIVEs, will be nil for VODs
- DorisPlayerEvent.playbackErrorLogsUpdated removed
- DorisPlayerEvent.playerItemFailed(logs: [String: Any]?) event now has logs payload that contains dictionary with a reason
New features
- func DorisPlayer.pauseAds() //pause ads that are playing currently
- func DorisPlayer.resumeAds() //resume ads that are paused currently
- new prop *DorisPlayer.allowsPictureInPicturePlayback * for custom UI PIP management
- DorisPlayer.unload(forcePlaybackFailure: Bool) > equivalent of AVPlayer.replaceCurrentItem(with: nil)
- DorisPlayer.setLimitedSeekableRange(range: (start: Date?, end: Date?)?) //restrict DVR window for lives
new DorisPlayerEvent events:
- pipWillStart
- pipDidStop
- subtitleChanged(DorisMediaSelection)
- audioTrackChanged(DorisMediaSelection)
- didCurrentItemChange(old: AVPlayerItem?, new: AVPlayerItem?)
- playbackStalled
- didTimeControlStatusChange(status: AVPlayer.TimeControlStatus)
1.0.2
Released: 22.11.2022
New features
- autostart flag added to avdoris.load() method
1.0.1
Released: 15.11.2022
Fixed
- VODs with sideloaded subtitles playback failure
1.0.0
Released: 12.09.2022
Breaking API Changes
- CSAISource, DAISource, PlayerItemSource - removed isLive prop from initialiser, now stream type is determined automatically from manifest file
- DorisPluginsConfig substituted with AVDorisConfig
- Introduced DorisPlayerUIType as part of AVDorisConfig to provide UI type used with AVDoris
- Introduced DorisPlayerConfig as part of AVDorisConfig which is used to specify playback related config including AVAudioSession configuration
- DorisAdsConfig is now optional (pass nil if you are not planning to include ads to you player) and also part of AVDorisConfig
- DorisMuxConfig removed, now you need to just specify ui type as part of AVDorisConfig
- DorisPlayerUIType.custom(playerLayer: AVPlayerLayer)
- DorisPlayerUIType.native(playerViewController: AVPlayerViewController)
- DorisPipConfig removed, will be enabled by default if you chose DorisPlayerUIType.custom(playerLayer: AVPlayerLayer), otherwise if you want Picture in Picture with native UI, you should rely on AVPlayerViewController.allowsPictureInPicturePlayback setting
- avDoris.configureMux() renamed to avDoris.startMuxMonitoring()
New features
- ability to configure NowPlaying info and Command Center
- avDoris.updateMetadata(_ metadata: DorisPlayerMediaMetadata)
- avDoris.updateRemoteCommands(with config: DorisRemoteCommandsConfig)
- Introduced new type of events from DorisPlayer - RemoteCommandEvent, which sends events from Control Center (Lock Screen playback controls)
- New DorisPlayerEvents
- DorisPlayerEvent.willLoadAfterDelay(delay: let delay, position: let position):
- DorisPlayerEvent.willLoadNow:
- DorisPlayerEvent.streamTypeRecognized(streamType: let streamType):
- DorisPlayerEvent.loadedTimeRangesChanged(start: let start, end: let end):
- DorisPlayerEvent.audioSessionRouteChanged(route: let route):
- DorisPlayerEvent.playbackLogsUpdated(logs: let logs):
- DorisPlayerEvent.playbackErrorLogsUpdated(logs: let logs):
- New AdvertisementEvents:
- AdvertisementEvent.willSeekWithSnapBack(snapBackPosition: let snapBackPosition, requestedPosition: let requestedPosition):
- AdvertisementEvent.didSeekWithSnapBack(snapBackPosition: let snapBackPosition, requestedPosition: let requestedPosition):
- New API for delayed loading
- added new parameter delay to each avDoris.load() method
- avDoris.load(source: source, delay: 5)
- avDoris.cancelDelayedLoad(type: CancelationType.cancel)
- avDoris.cancelDelayedLoad(type: CancelationType.loadInstantly(playbackPosition))
- Ability to replace current player item with nil
- avDoris.unload()
- Ability to stop mux monitoring
- avDoris.stopMuxMonitoring()
Fixes
- fixed Video loops every 30 seconds on iPhone 12 mini
- fixed retain cycle with MUX and AVPlayerViewController
- fixed retain cycle with PIP using custom UI
- fixed airply bugs
- fixed Player states were changed where they did not suppose to
- fixed ADS related issues