ios - timedMetaData 值的编码错误

标签 ios encoding avmetadataitem

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

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

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

代码示例:

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)
        }
    }
}

最佳答案

我使用 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 - timedMetaData 值的编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32117863/

相关文章:

ios - Apple Pay - onvalidatemerchant Payment Not Completed 错误

iphone - 在 UIViewController 上显示 clearColor UIViewController

ios - 复制 iOS 邮件撰写界面的行为,但 View 不跟随光标

swift - 通过 AVMetaDataItem 写入 ID3 标签

android - Flutter 中的水平步进器

Android更改视频文件的分辨率

Python ascii编码问题

java - 如何以西里尔文返回下载的文件名?

objective-c - 如何为 AVMetadataFormatiTunesMetadata 创建 AVMutableMetadataItem

swift - 如何在 swift3 中设置 AVMetadataItem 的标识符?