forked from Ninjalama/streamyfin_mirror
fix: not setting start position on video start
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user