【问题标题】:timedMetaData value has wrong encodingtimedMetaData 值的编码错误
【发布时间】:2015-08-20 12:07:40
【问题描述】:

我正在为 iOS 开发一个广播应用,并且需要能够从音频流中解析元数据,该音频流的编码支持挪威字符“ÆØÅ”。

在 AVPlayerItem 上使用 timedMetaData 这三个字符显示为“ÃÃÔ。

有谁知道如何更改 timedMetaData 项的值(不是 stringValue)的编码?或者如何获取原始值?

代码示例:

private var url = ""
private var player: AVPlayer!
private var playerItem: AVPlayerItem!

playerItem = AVPlayerItem(URL: NSURL(string: url)!)
player = AVPlayer(playerItem: playerItem)
playerItem.addObserver(self, forKeyPath: "timedMetadata", options: NSKeyValueObservingOptions.New, context: nil)

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {

    guard keyPath == "timedMetadata" else { return }

    for item in playerItem.timedMetadata! {

        if item.commonKey == "title" {

            let value = item.value

            print(value)
            //metadata = item.stringValue!
        } else {
            print(item.key)
        }
    }
}

【问题讨论】:

  • 你找到答案了吗?

标签: ios encoding avmetadataitem


【解决方案1】:

我使用 C#/Xamarin 找到了解决方案。您需要使用 ISOLatin1 对元数据进行编码,然后使用 UTF8:

NSString str = new NSString(item.StringValue);
var data = str.Encode(NSStringEncoding.ISOLatin1, true);
string meta = new NSString(data, NSStringEncoding.UTF8);

【讨论】:

  • 这是一个关于使用IOS SDK和AVPlayerItem类的问题。它不是一种编程语言的探索。我的回答解决了在 C# 中使用 IOS SDK 类的问题。熟悉 Swift 和 IOS SDK 的人很容易理解如何使用这段代码
  • 谢谢!那应该这样做。我完全忘记了这篇文章,因为我们决定使用 StreamingKit 而不是 AVPlayer。
猜你喜欢
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
相关资源
最近更新 更多