2015-08-20 36 views
2

我正在開發一個iOS的廣播應用程序,需要能夠使用支持挪威字符「ÆØÅ」的編碼從音頻流中解析元數據。timedMetaData值有錯誤的編碼

在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) 
     } 
    } 
} 
+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); 
+0

這是關於使用IOS SDK和AVPlayerItem類的問題。這不是一門編程語言探索。我的答案解決了在C#中使用IOS SDK類的問題。有關Swift和IOS SDK知識的人很容易理解如何使用此代碼 –

+0

謝謝!這應該做到這一點。我完全忘了這篇文章,因爲我們決定使用StreamingKit而不是AVPlayer。 – tomen