Doris

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 prop DorisPlayerError with more meaningful mapping of underlying NSError
  • new prop DorisPlayer.resumeRate
  • new feature DorisTracksPolicy in DorisPlaybackConfig 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 enum
  • AVDorisConfig api slightly changed
  • DAISource and CSAISource removed, they are now part of DorisSource
  • DorisAdsError changed from enum to struct
  • DiceSourceResolver removed parameter useSubtitles as airplay is now fixed on CDN level and subtitles can be safely used while airplaying
  • DiceSourceResolverLogin removed(combined with DiceSourceResolver)

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

Doris