使用 PlayerItem.timedMetadata (粘贴在下面)已经有一段时间了,并且效果很好。然而,Apple 似乎已将此方法标记为“iOS 13 中已弃用”,并且可能(或将)被删除。
Xcode 确实告诉我,我必须使用另一种名为“AVPlayerItemMetadataOutput”的方法,但我从未尝试过。因此,在互联网(谷歌)上查找时,除了苹果文档之外,我什么也没发现(https://developer.apple.com/documentation/avfoundation/avplayeritemmetadataoutput https://developer.apple.com/documentation/avfoundation/avplayeritemmetadataoutput).
override open func observeValue(forKeyPath: String?, of: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard forKeyPath == "timedMetadata" else { return }
guard let meta = PlayerItem.timedMetadata else { return }
for metadata in meta {
if let songName = metadata.value(forKey: "value") as? String {
Variables.MediaInfo = (songName)
self.MediaBox.text = ("Now Playing \n \(songName)")
setupNowPlaying()
}
}
}
UPDATE!
我已经在苹果文档中撞了一天左右的头了,然后它就像一块砖头打在我脸上。
class ViewController: UIViewController,AVPlayerItemMetadataOutputPushDelegate {
weak var myDelegate: AVPlayerItemMetadataOutputPushDelegate?
var playerItem: AVPlayerItem?
var player = AVPlayer()
override func viewDidLoad() {
super.viewDidLoad()
print("lets go!")
let url = URL(string: "<URLREMOVED>")!
let asset = AVAsset(url: url)
let playerItem = AVPlayerItem(asset: asset)
let metadataOutput = AVPlayerItemMetadataOutput(identifiers: nil)
metadataOutput.setDelegate(self, queue: DispatchQueue.main)
playerItem.add(metadataOutput)
player = AVPlayer(playerItem: playerItem)
player.play()
print("END")
print(playerItem.automaticallyLoadedAssetKeys.description)
}
func metadataOutput(_ output: AVPlayerItemMetadataOutput, didOutputTimedMetadataGroups groups: [AVTimedMetadataGroup], from track: AVPlayerItemTrack?) {
}
}
因此,这会读取定时元数据更改的流,然后显示以下输出:
AVMutableMetadataItem:0x600002064020,标识符= icy / StreamTitle,keySpace = icy,键类= __NSCFConstantString,key = StreamTitle,commonKey = title,extendLanguageTag =(null),dataType =(null),时间= {102328704/44100 = 2320.379},持续时间={1/44100 = 0.000},startDate=(null),extras={\n},值类别=__NSCFString,值=Tina Turner - Way Of The World>
整齐吧?所以现在我所要做的就是将 icy/StreamTitle 过滤到一个字符串中,我就很高兴了! :D