我正在嘗試從我的 firebase 存盤中獲取 HLS 素材,如果我直接將下載 URL 存盤在一個變數中并將其用作 AVPlayer 的 URL,則視頻播放流暢。但是,當我嘗試使用一些 asncy 方法首先獲取 url 時,AVPlayer 會收到 url 引數的 nil 值:

考慮到在對視圖videoPlayer的 await 呼叫完成之前首先呈現視圖,這是有道理的。vManager.loadVideos()body
現在,通常我在從服務器加載影像時從未遇到過此類問題,因為我一直使用AsyncImage它并且它會自動處理影像加載。但是,我將如何為我的 AVPlayer 實作類似的目標?
我的狀態屬性和物件如下:
struct RecentCard: View {
@State private var player = AVPlayer()
@State private var playToggle: Bool = true
@State var video: VideoModel
@StateObject var vManager = VideoManager()
var body: some View {
ZStack(alignment: .leading) {
videoPlayer
textOverlay
}
.frame(maxWidth: .infinity, maxHeight: 220, alignment: .leading)
.background(.thinMaterial, in: RoundedRectangle(cornerRadius: 20))
.cornerRadius(20)
.task {
await vManager.loadVideos()
video = vManager.video
}
}
另外,請注意,獲取正確的 URL 沒有問題。我已經驗證收到的 URL 是有效的。唯一的問題是 AVPlayer 在獲取 URL 之前加載。我也是一個相對較新的 iOS 開發人員。
uj5u.com熱心網友回復:
URL成功獲取后加載視頻。洗掉您的代碼,.onAppear然后添加:
.onChange(of: video.videoUrlPath) { newValue in
guard let url = newValue else {return}
player = AVPlayer(url: url)
player.play()
}
或者,您可以將該代碼段放入.task.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494320.html
