ライブHTTPストリーミングを介してストリーミングされているMP3からID3情報を抽出するのに非常に苦労しています(興味がある場合は、Wowzaメディアサーバーを使用してください)。タグ(現在はアルバムタグとアルバムアートワークタグ)が各ファイルセグメントに適切に埋め込まれていることを知っています。手動でダウンロードすると.m3u
、サーバーによって生成されたインデックスファイルにリストされているように各セグメントでタグを確認できるからです。 。
私はAVFoundation
これを行うためにクラスを使用しており、次のように設定しています。
- (void)initializeAudioStream {
NSURL *streamUrl = [NSURL URLWithString:self.urlField.text];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:streamUrl];
self.musicPlayer = [AVPlayer playerWithPlayerItem:playerItem];
self.musicPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;
[self.musicPlayer addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:NULL];
}
KVOメソッドがトリガーされると、再生を開始し、 1/4秒ごとself.musicPlayer
に呼び出します。addPeriodicTimeObserverForInterval
ID3メタデータを抽出しようとするのはこのメソッドです。
私はこれを達成するために、印刷を含め、iOS側で考えられるすべてのことを試みました
self.musicPlayer.currentItem.asset.commonMetadata
AVAssetTrack
また、各インスタンスを繰り返し処理し、メタデータを出力します。
for (AVAssetTrack *track in self.musicPlayer.currentItem.asset.tracks) {
NSLog(@"Media type of track: %@", track.mediaType);
NSLog(@"Track metadata: %@", track.commonMetadata);
}
興味深いのは、アセットが常に2つのトラックを持っていると言っていることです。それらのプロパティを印刷するmediaType
と、最初のプロパティは「soun」、2番目のプロパティは「tmet」になります。私の仮定では、最初のトラックはオーディオデータ自体であり、2番目のトラックはメタデータです。ただし、に空の配列しか表示されませんcommonMetadata
。
statusOfValueForKey:error
また、トラックで使用しているプロパティのステータスを確認すると、commonMetadata
キーは常にとして返されAVKeyValueStatusLoaded
ます。
何か案は?私はここで完全に途方に暮れています。
また、私は現在、iOS4.2.1を実行しているiPhone4シミュレーターを介してこれを実行しています。Appleはまだ私の会社の開発者アカウントを承認しているので、まだデバイスに置くことができません。