Skip to content

Commit

Permalink
feat(VideoPlayer.swift): Video preview streaming enabled
Browse files Browse the repository at this point in the history
  • Loading branch information
adrien-coye committed Jan 22, 2025
1 parent 6e41a93 commit 3d5a213
Showing 1 changed file with 25 additions and 16 deletions.
41 changes: 25 additions & 16 deletions kDriveCore/VideoPlayer/VideoPlayer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -91,35 +91,44 @@ public final class VideoPlayer: Pausable {
}

private func setupPlayer(with file: File, driveFileManager: DriveFileManager) {
guard !driveFileManager.isPublicShare else {
return
}

if !file.isLocalVersionOlderThanRemote {
let localAsset = AVAsset(url: file.localUrl)
asset = localAsset
let playerItem = AVPlayerItem(asset: localAsset)
player = AVPlayer(playerItem: playerItem)
updateMetadata(asset: localAsset, defaultName: file.name)
observePlayer(currentItem: playerItem)
} else if let publicShareProxy = driveFileManager.publicShareProxy {
let url = Endpoint.downloadShareLinkFile(
driveId: publicShareProxy.driveId,
linkUuid: publicShareProxy.shareLinkUid,
fileId: file.id
).url

let asset = AVURLAsset(url: url, options: nil)
setupStreamingAsset(asset, fileName: file.name)

} else if let token = driveFileManager.apiFetcher.currentToken {
driveFileManager.apiFetcher.performAuthenticatedRequest(token: token) { token, _ in
if let token = token {
let url = Endpoint.download(file: file).url
let headers = ["Authorization": "Bearer \(token.accessToken)"]
let urlAsset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": headers])
self.asset = urlAsset
Task { @MainActor in
let playerItem = AVPlayerItem(asset: urlAsset)
self.player = AVPlayer(playerItem: playerItem)
self.updateMetadata(asset: urlAsset, defaultName: file.name)
self.observePlayer(currentItem: playerItem)
}
}
guard let token else { return }
let url = Endpoint.download(file: file).url
let headers = ["Authorization": "Bearer \(token.accessToken)"]
let asset = AVURLAsset(url: url, options: ["AVURLAssetHTTPHeaderFieldsKey": headers])
self.setupStreamingAsset(asset, fileName: file.name)
}
}
}

private func setupStreamingAsset(_ urlAsset: AVURLAsset, fileName: String) {
asset = urlAsset
Task { @MainActor in
let playerItem = AVPlayerItem(asset: urlAsset)
self.player = AVPlayer(playerItem: playerItem)
self.updateMetadata(asset: urlAsset, defaultName: fileName)
self.observePlayer(currentItem: playerItem)
}
}

private func observePlayer(currentItem: AVPlayerItem) {
NotificationCenter.default.addObserver(
self,
Expand Down

0 comments on commit 3d5a213

Please sign in to comment.