fix: not setting start position on video start

This commit is contained in:
Fredrik Burmester
2024-11-10 10:55:22 +01:00
parent 33b94105c2
commit 00a296cee6

View File

@@ -12,6 +12,7 @@ class VlcPlayerView: ExpoView {
private var lastReportedIsPlaying: Bool? private var lastReportedIsPlaying: Bool?
private var isMediaReady: Bool = false private var isMediaReady: Bool = false
private var customSubtitles: [(internalName: String, originalName: String)] = [] private var customSubtitles: [(internalName: String, originalName: String)] = []
private var startPosition: Int32?
// MARK: - Initialization // MARK: - Initialization
@@ -108,6 +109,7 @@ class VlcPlayerView: ExpoView {
let autoplay = source["autoplay"] as? Bool ?? false let autoplay = source["autoplay"] as? Bool ?? false
let isNetwork = source["isNetwork"] as? Bool ?? false let isNetwork = source["isNetwork"] as? Bool ?? false
let startPosition = source["startPosition"] as? Int32 ?? 0 let startPosition = source["startPosition"] as? Int32 ?? 0
self.startPosition = startPosition
guard let uri = uri, !uri.isEmpty else { guard let uri = uri, !uri.isEmpty else {
print("Error: Invalid or empty URI") print("Error: Invalid or empty URI")
@@ -160,10 +162,10 @@ class VlcPlayerView: ExpoView {
if autoplay { if autoplay {
print("Playing...") print("Playing...")
self.play() self.play()
if startPosition > 0 { // if startPosition > 0 {
print("Debug: Starting at position: \(startPosition)") // print("Debug: Starting at position: \(startPosition)")
self.seekTo(startPosition) // self.seekTo(startPosition)
} // }
} }
} }
} }
@@ -585,6 +587,7 @@ extension VlcPlayerView: VLCMediaPlayerDelegate {
if player.isPlaying && !self.isMediaReady { if player.isPlaying && !self.isMediaReady {
self.isMediaReady = true self.isMediaReady = true
self.onVideoLoadEnd?(stateInfo) self.onVideoLoadEnd?(stateInfo)
self.seekToStartTime()
} }
if self.lastReportedState != currentState if self.lastReportedState != currentState
@@ -597,6 +600,22 @@ extension VlcPlayerView: VLCMediaPlayerDelegate {
} }
} }
func seekToStartTime() {
DispatchQueue.main.async { [weak self] in
guard let self = self, let player = self.mediaPlayer else { return }
if let startPosition = self.startPosition, startPosition > 0 {
print("Debug: Seeking to start position: \(startPosition)")
player.time = VLCTime(int: Int32(startPosition))
// Ensure the player continues playing after seeking
if !player.isPlaying {
player.play()
}
}
}
}
func mediaPlayerTimeChanged(_ aNotification: Notification) { func mediaPlayerTimeChanged(_ aNotification: Notification) {
DispatchQueue.main.async { [weak self] in DispatchQueue.main.async { [weak self] in
self?.updateVideoProgress() self?.updateVideoProgress()
@@ -608,12 +627,10 @@ extension VlcPlayerView: VLCMediaPlayerDelegate {
guard let player = self.mediaPlayer else { return } guard let player = self.mediaPlayer else { return }
let currentTimeMs = player.time.intValue let currentTimeMs = player.time.intValue
// let remainingTimeMs = player.remainingTime let remainingTimeMs = player.remainingTime
let durationMs = player.media?.length.intValue ?? 0 let durationMs = player.media?.length.intValue ?? 0
// print("currentTimeMs: \(currentTimeMs) RemainingTimeMs: \(remainingTimeMs)")
if currentTimeMs >= 0 && currentTimeMs < durationMs { if currentTimeMs >= 0 && currentTimeMs < durationMs {
self.onVideoProgress?([ self.onVideoProgress?([
"currentTime": currentTimeMs, "currentTime": currentTimeMs,
"duration": durationMs, "duration": durationMs,