问题描述
我正在构建一个无线电应用程序,通过观察项目的timedMetadata来更新歌曲标题。第一次按播放时,当前的实现成功更新了歌曲标题。但是,如果我暂停播放,锁定屏幕,解锁屏幕并按播放,则即使播放同一首歌曲,元数据也为零。然后,如果歌曲改变,它就会神奇地再次开始更新。
这是我的观察班:
import Combine
import AVFoundation
class MetadataObserver {
@Published var songTitle: String?
private var itemObservation: AnyCancellable?
init(player: AVPlayer) {
itemObservation = player.currentItem?.publisher(for: \.timedMetadata).sink { Metadata in
guard let title = Metadata?.first?.value as? String else { return }
self.hymnTitle = title
}
}
}
这是我更新视图的方式
import SwiftUI
struct HymnNameView: View {
@Observedobject var player: AudioPlayer
@State private var hymnName = "Song Title"
let MetadataObserver: MetadataObserver
init(player: AudioPlayer) {
self.player = player
self.MetadataObserver = MetadataObserver(player: player)
}
var body: some View {
Text(hymnName)
.onReceive(MetadataObserver.$hymnTitle) { hymnName in
self.hymnName = hymnName ?? "Song Title"
}
}
}
SIDENOTE 我也收到此警告:“'timedMetadata'在iOS 13.0中已过时:使用AVPlayerItemMetadataOutput获取定时的元数据”。如果有人知道如何使用AVPlayerItemMetadataOutput并解决我的问题,请告诉我!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)