timedMetaData 值的编码错误
timedMetaData value has wrong encoding
我正在为 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)
}
}
}
我找到了使用 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 开发广播应用程序,需要能够使用支持挪威字符“ÆØÅ”的编码从音频流中解析元数据。
在 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)
}
}
}
我找到了使用 C#/Xamarin 的解决方案。您需要使用 ISOLatin1 对元数据进行编码,然后编码为 UTF8:
NSString str = new NSString(item.StringValue);
var data = str.Encode(NSStringEncoding.ISOLatin1, true);
string meta = new NSString(data, NSStringEncoding.UTF8);