timedMetaData值编码错误

时间:2015-08-20 12:07:40

标签: ios encoding avmetadataitem

我正在开发适用于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)
        }
    }
}

1 个答案:

答案 0 :(得分:-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);