In version 3.9 of our iOS SDK, we have introduced some changes to our API. This article details the main changes and how to handle them.
1. DNAClientDelegate
Before 3.9
The DNAClientDelegate
required the following methods:
- playbackTime
- loadedTimeRanges
- bitrate
extension CurrentPlayerViewControlller: DNAClientDelegate {
func playbackTime() -> Double {
if let player = self.player {
return CMTimeGetSeconds(player.currentTime())
}
return 0
}
func loadedTimeRanges() -> [NSValue] {
guard let player = self.player else {
return []
}
let timeRanges = player.currentItem!.loadedTimeRanges
return timeRanges.map { (value) -> NSValue in
NSValue(timeRange: TimeRange(range: value.timeRangeValue))
}
}
func updatePeakBitRate(_ bitRate: Double) {
self.player?.currentItem?.preferredPeakBitRate = bitRate
}
}
From 3.9
Buffer levels where randomly set at player instantiation between a minimum and maximum target.
We now dynamically set the buffer targets to optimize DNA efficiency.
The DNAClientDelegate
requires the following methods:
- playbackTime - Mandatory
- loadedTimeRanges - Mandatory
- bitrate - Optional
- bufferTarget - Optional
extension CurrentPlayerViewControlller: DNAClientDelegate {
func playbackTime() -> Double {
if let player = self.player {
return CMTimeGetSeconds(player.currentTime())
}
return 0
}
func loadedTimeRanges() -> [NSValue] {
guard let player = self.player else {
return []
}
let timeRanges = player.currentItem!.loadedTimeRanges
return timeRanges.map { (value) -> NSValue in
NSValue(timeRange: TimeRange(range: value.timeRangeValue))
}
}
func updatePeakBitRate(_ bitRate: Double) {
self.player?.currentItem?.preferredPeakBitRate = bitRate
}
public func bufferTarget() -> Double {
if #available(iOS 10.0, tvOS 10.0, *) {
return self.player?.currentItem?.preferredForwardBufferDuration ?? 0
}
return 0.0
}
public func setBufferTarget(_ target: Double) {
if #available(iOS 10.0, tvOS 10.0, *) {
self.player?.currentItem?.preferredForwardBufferDuration = target
}
}
}