2

私は iOS 用のラジオ アプリを開発しており、ノルウェー語の文字「ÆØÅ」をサポートするエンコーディングを使用して、オーディオ ストリームからメタデータを解析できるようにする必要があります。

AVPlayerItem で timedMetaData を使用すると、これらの 3 文字は「ÃÃÃã」として表示されます。

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

1 に答える 1

-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);
于 2017-05-21T18:46:37.860 に答える