a little something here...

This commit is contained in:
Hailey
2024-07-29 15:54:50 -07:00
parent 43ba0f21f6
commit 8d03297de6
6 changed files with 163 additions and 1 deletions
@@ -0,0 +1,64 @@
//
// HLSDownload.swift
// ExpoBlueskySwissArmy
//
// Created by Hailey on 7/29/24.
//
import Foundation
import AVKit
class HLSDownload {
private let avAsset: AVAsset
private var exportSession: AVAssetExportSession?
let sourceUrl: URL
init (sourceUrl: URL) {
self.sourceUrl = sourceUrl
self.avAsset = AVAsset(url: sourceUrl)
}
func download(progress: @escaping(Float) -> Void) async -> URL? {
guard let exportSession = AVAssetExportSession(asset: self.avAsset, presetName: AVAssetExportPresetHighestQuality) else {
// @TODO return an error for the user here
print("Export session error")
return nil
}
let outDir = FileManager().urls(for: .cachesDirectory, in: .userDomainMask)[0]
guard let outUrl = URL(string: "\(outDir.absoluteString)\(ProcessInfo.processInfo.globallyUniqueString).mp4") else {
print("oops failed to make a url")
return nil
}
print(outUrl.absoluteString)
exportSession.outputFileType = AVFileType.mp4
exportSession.outputURL = outUrl
let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (_: Timer) in
// Do something here
}
self.exportSession = exportSession
await exportSession.export()
// Update with final progress
progress(1)
// Stop calling the callback
timer.invalidate()
return outUrl
}
func progress() -> Float {
guard let exportSession = self.exportSession else {
return 0
}
return exportSession.progress
}
func cancel() {
// Cancel the download
}
}