“timedMetadata”已弃用。另一种方法? <更新>

2024-01-07

使用 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


    func metadataOutput(_ output: AVPlayerItemMetadataOutput, didOutputTimedMetadataGroups groups: [AVTimedMetadataGroup], from track: AVPlayerItemTrack?) {
    if let item = groups.first?.items.first // make this an AVMetadata item
    {
        item.value(forKeyPath: "value") // looking for that key bro
        let Song = (item.value(forKeyPath: "value")!)
        MetaData = "Now Playing: \n \(Song)" // print the results
    } else {
        MetaData = "MetaData Error" // No Metadata or Could not read
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“timedMetadata”已弃用。另一种方法? <更新> 的相关文章

随机推荐