12

ライブ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に呼び出します。addPeriodicTimeObserverForIntervalID3メタデータを抽出しようとするのはこのメソッドです。

私はこれを達成するために、印刷を含め、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はまだ私の会社の開発者アカウントを承認しているので、まだデバイスに置くことができません。

4

3 に答える 3

9

を使用する代わりに、:でcommonMetadata使用してみてください。timedMetadataAVPlayerItem

[playerItem addObserver:self forKeyPath:@"timedMetadata" options:NSKeyValueObservingOptionNew context:NULL];
于 2011-02-24T14:12:16.637 に答える
0

ただのアイデア:fiddler / othersnifferを使用してhttpリクエストのコンテンツをスニッフィングし、メタデータが存在するかどうかを確認しますか?

于 2011-02-24T08:50:04.380 に答える
0

AppdelegatedidFinishLaunchingWithOptionsメソッドにNSURLProtocolのサブクラスを登録する必要があります。

次に、ビデオプレーヤーからのリクエストの応答を確認できます

于 2016-03-09T14:01:58.610 に答える