Не уверен, что этот вопрос все еще актуален для его автора, но может быть, он кому-нибудь поможет.После двух дней боли я выяснил, что все довольно просто.Вот код, который работает для меня:
AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:<here your http stream url>]];
[playerItem addObserver:self forKeyPath:@"timedMetadata" options:NSKeyValueObservingOptionNew context:nil];
AVPlayer* player = [[AVPlayer playerWithPlayerItem:playerItem] retain];
[player play];
, а затем:
- (void) observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object
change:(NSDictionary*)change context:(void*)context {
if ([keyPath isEqualToString:@"timedMetadata"])
{
AVPlayerItem* playerItem = object;
for (AVMetadataItem* metadata in playerItem.timedMetadata)
{
NSLog(@"\nkey: %@\nkeySpace: %@\ncommonKey: %@\nvalue: %@", [metadata.key description], metadata.keySpace, metadata.commonKey, metadata.stringValue);
}
}
}
Вот и все.Я не знаю, почему Apple не предоставила в документах для AVPlayerItem этот образец для доступа к «заголовку» потока, который является ключевой функцией для потокового аудио реального мира.В «Справочнике по основам AV Foundation» они рассказывают о «метаданных timed», которые нигде не нужны.И пример Мэтта не работает со всеми потоками (но AVPlayer работает).