video: switch videoplayer to use detached tasks
This commit is contained in:
@@ -53,6 +53,7 @@ enum ImageShape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Image Carousel
|
// MARK: - Image Carousel
|
||||||
|
@MainActor
|
||||||
struct ImageCarousel: View {
|
struct ImageCarousel: View {
|
||||||
var urls: [MediaUrl]
|
var urls: [MediaUrl]
|
||||||
|
|
||||||
|
|||||||
@@ -204,6 +204,7 @@ class EventCache {
|
|||||||
return image_metadata[url.absoluteString.lowercased()]
|
return image_metadata[url.absoluteString.lowercased()]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@MainActor
|
||||||
func lookup_media_size(url: URL) -> CGSize? {
|
func lookup_media_size(url: URL) -> CGSize? {
|
||||||
if let img_meta = lookup_img_metadata(url: url) {
|
if let img_meta = lookup_img_metadata(url: url) {
|
||||||
return img_meta.meta.dim?.size
|
return img_meta.meta.dim?.size
|
||||||
@@ -216,6 +217,7 @@ class EventCache {
|
|||||||
video_meta[url.absoluteString] = meta
|
video_meta[url.absoluteString] = meta
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@MainActor
|
||||||
func get_video_player_model(url: URL) -> VideoPlayerModel {
|
func get_video_player_model(url: URL) -> VideoPlayerModel {
|
||||||
if let model = video_meta[url.absoluteString] {
|
if let model = video_meta[url.absoluteString] {
|
||||||
return model
|
return model
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ enum VideoHandler {
|
|||||||
case onStateChanged((VideoState) -> Void)
|
case onStateChanged((VideoState) -> Void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@MainActor
|
||||||
public class VideoPlayerModel: ObservableObject {
|
public class VideoPlayerModel: ObservableObject {
|
||||||
@Published var autoReplay: Bool = true
|
@Published var autoReplay: Bool = true
|
||||||
@Published var muted: Bool = true
|
@Published var muted: Bool = true
|
||||||
@@ -164,20 +165,11 @@ public extension VideoPlayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@available(iOS 13, *)
|
|
||||||
public extension VideoPlayer {
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func get_video_size(player: AVPlayer) async -> CGSize? {
|
func get_video_size(player: AVPlayer) async -> CGSize? {
|
||||||
let res = await withCheckedContinuation { continuation in
|
let res = Task.detached(priority: .background) {
|
||||||
DispatchQueue.global().async {
|
return player.currentImage?.size
|
||||||
let size = player.currentImage?.size
|
|
||||||
continuation.resume(returning: size)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return res
|
return await res.value
|
||||||
}
|
}
|
||||||
|
|
||||||
func video_has_audio(player: AVPlayer) async -> Bool {
|
func video_has_audio(player: AVPlayer) async -> Bool {
|
||||||
@@ -290,13 +282,16 @@ extension VideoPlayer: UIViewRepresentable {
|
|||||||
self.videoPlayer = videoPlayer
|
self.videoPlayer = videoPlayer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@MainActor
|
||||||
func startObserver(uiView: VideoPlayerView) {
|
func startObserver(uiView: VideoPlayerView) {
|
||||||
guard observer == nil else { return }
|
guard observer == nil else { return }
|
||||||
|
|
||||||
observer = uiView.addPeriodicTimeObserver(forInterval: .init(seconds: 0.25, preferredTimescale: 60)) { [weak self, unowned uiView] time in
|
observer = uiView.addPeriodicTimeObserver(forInterval: .init(seconds: 0.25, preferredTimescale: 60)) { [weak self, unowned uiView] time in
|
||||||
guard let `self` = self else { return }
|
guard let `self` = self else { return }
|
||||||
|
|
||||||
self.videoPlayer.model.time = time
|
Task { @MainActor in
|
||||||
|
self.videoPlayer.model.time = time
|
||||||
|
}
|
||||||
self.observerTime = time
|
self.observerTime = time
|
||||||
|
|
||||||
self.updateBuffer(uiView: uiView)
|
self.updateBuffer(uiView: uiView)
|
||||||
@@ -318,6 +313,7 @@ extension VideoPlayer: UIViewRepresentable {
|
|||||||
self.observerBuffer = nil
|
self.observerBuffer = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@MainActor
|
||||||
func updateBuffer(uiView: VideoPlayerView) {
|
func updateBuffer(uiView: VideoPlayerView) {
|
||||||
let bufferProgress = uiView.bufferProgress
|
let bufferProgress = uiView.bufferProgress
|
||||||
guard bufferProgress != observerBuffer else { return }
|
guard bufferProgress != observerBuffer else { return }
|
||||||
|
|||||||
Reference in New Issue
Block a user