2015-08-20 3 views
2

Я разрабатываю приложение для радио для iOS и должен иметь возможность анализировать метаданные из аудиопотока с кодировкой, которая поддерживает норвежские символы «ÆØÅ».timedMetaData значение имеет неправильное кодирование

Использование timedMetaData в AVPlayerItem эти три символа отображаются как «ÃÃû.

Кто-нибудь знает, как изменить кодировку значения (не stringValue) элемента timedMetaData? Или, может быть, как получить исходную стоимость?

Пример кода:

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. Это не язык программирования. Мой ответ решает проблему с использованием классов SDK IOS в C#. Человек, обладающий знаниями о Swift и IOS SDK, легко поймет, как использовать этот код. –

+0

Спасибо! Это должно сделать это. Я полностью забыл этот пост, поскольку мы решили использовать StreamingKit вместо AVPlayer. – tomen