Corrected currentTime & playableDuration when using start & end time
This commit is contained in:
parent
0f6057bea5
commit
fe5fc543b9
@ -12,13 +12,17 @@ enum RCTVideoUtils {
|
|||||||
*
|
*
|
||||||
* \returns The playable duration of the current player item in seconds.
|
* \returns The playable duration of the current player item in seconds.
|
||||||
*/
|
*/
|
||||||
static func calculatePlayableDuration(_ player:AVPlayer?) -> NSNumber {
|
static func calculatePlayableDuration(_ player:AVPlayer?, withSource source:VideoSource?) -> NSNumber {
|
||||||
guard let player = player,
|
guard let player = player,
|
||||||
let video:AVPlayerItem = player.currentItem,
|
let video:AVPlayerItem = player.currentItem,
|
||||||
video.status == AVPlayerItem.Status.readyToPlay else {
|
video.status == AVPlayerItem.Status.readyToPlay else {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (source?.startTime != nil && source?.endTime != nil) {
|
||||||
|
return NSNumber(value: (Float64(source?.endTime ?? 0) - Float64(source?.startTime ?? 0)) / 1000)
|
||||||
|
}
|
||||||
|
|
||||||
var effectiveTimeRange:CMTimeRange?
|
var effectiveTimeRange:CMTimeRange?
|
||||||
for (_, value) in video.loadedTimeRanges.enumerated() {
|
for (_, value) in video.loadedTimeRanges.enumerated() {
|
||||||
let timeRange:CMTimeRange = value.timeRangeValue
|
let timeRange:CMTimeRange = value.timeRangeValue
|
||||||
@ -31,6 +35,10 @@ enum RCTVideoUtils {
|
|||||||
if let effectiveTimeRange = effectiveTimeRange {
|
if let effectiveTimeRange = effectiveTimeRange {
|
||||||
let playableDuration:Float64 = CMTimeGetSeconds(CMTimeRangeGetEnd(effectiveTimeRange))
|
let playableDuration:Float64 = CMTimeGetSeconds(CMTimeRangeGetEnd(effectiveTimeRange))
|
||||||
if playableDuration > 0 {
|
if playableDuration > 0 {
|
||||||
|
if (source?.startTime != nil) {
|
||||||
|
return NSNumber(value: (playableDuration - Float64(source?.startTime ?? 0) / 1000))
|
||||||
|
}
|
||||||
|
|
||||||
return playableDuration as NSNumber
|
return playableDuration as NSNumber
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -207,7 +207,10 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let currentTime = _player?.currentTime()
|
var currentTime = _player?.currentTime()
|
||||||
|
if (currentTime != nil && _source?.startTime != nil) {
|
||||||
|
currentTime = CMTimeSubtract(currentTime!, CMTimeMake(value: _source?.startTime ?? 0, timescale: 1000))
|
||||||
|
}
|
||||||
let currentPlaybackTime = _player?.currentItem?.currentDate()
|
let currentPlaybackTime = _player?.currentItem?.currentDate()
|
||||||
let duration = CMTimeGetSeconds(playerDuration)
|
let duration = CMTimeGetSeconds(playerDuration)
|
||||||
let currentTimeSecs = CMTimeGetSeconds(currentTime ?? .zero)
|
let currentTimeSecs = CMTimeGetSeconds(currentTime ?? .zero)
|
||||||
@ -223,7 +226,7 @@ class RCTVideo: UIView, RCTVideoPlayerViewControllerDelegate, RCTPlayerObserverH
|
|||||||
}
|
}
|
||||||
onVideoProgress?([
|
onVideoProgress?([
|
||||||
"currentTime": NSNumber(value: Float(currentTimeSecs)),
|
"currentTime": NSNumber(value: Float(currentTimeSecs)),
|
||||||
"playableDuration": RCTVideoUtils.calculatePlayableDuration(_player),
|
"playableDuration": RCTVideoUtils.calculatePlayableDuration(_player, withSource: _source),
|
||||||
"atValue": NSNumber(value: currentTime?.value ?? .zero),
|
"atValue": NSNumber(value: currentTime?.value ?? .zero),
|
||||||
"currentPlaybackTime": NSNumber(value: NSNumber(value: floor(currentPlaybackTime?.timeIntervalSince1970 ?? 0 * 1000)).int64Value),
|
"currentPlaybackTime": NSNumber(value: NSNumber(value: floor(currentPlaybackTime?.timeIntervalSince1970 ?? 0 * 1000)).int64Value),
|
||||||
"target": reactTag,
|
"target": reactTag,
|
||||||
|
Loading…
Reference in New Issue
Block a user