Измеритель уровня живого потока AVPlayer HLS (отображение данных FFT)

м используюAVPlayer для радиоприложения, использующего потоковую передачу по HTTP. Теперь я хочу реализовать измеритель уровня для этого аудиопотока. Лучше всего будет измеритель уровня, показывающий разные частоты, но простым левым / правым решением будет отличная отправная точка.

Я нашел несколько примеров, используяAVAudioPlayer, Но я не могу найти решение для получения необходимой информации.AVPlayer

Может кто-нибудь придумать решение моей проблемы?

РЕДАКТИРОВАТЬ Я хочу создать что-то вроде этого (но лучше)

РЕДАКТИРОВАТЬ II

Одним из предложений было использоватьMTAudioProcessingTap чтобы получить необработанные аудио данные. Примеры, которые я мог найти, используя[[[_player currentItem] asset] tracks] массив, который в моем случае является пустым массивом. Другое предложение было использовать[[_player currentItem] audioMix] которыйnull для меня.

РЕДАКТИРОВАТЬ III

Послелет уже, кажется, до сих пор нет решения. Я действительно добился прогресса, поэтому яЯ делюсь этим.

Во время настройки яm добавление наблюдателя значения ключа в playerItem:

[[[self player] currentItem] addObserver:self forKeyPath:@"tracks" options:kNilOptions context:NULL];

//////////////////////////////////////////////////////

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)changecontext:(void *)context
    if ([keyPath isEqualToString:@"tracks"] && [[object tracks] count] > 0) {
        for (AVPlayerItemTrack *itemTrack in [object tracks]) {
            AVAssetTrack *track = [itemTrack assetTrack];

            if ([[track mediaType] isEqualToString:AVMediaTypeAudio]) {
                [self addAudioProcessingTap:track];
                break;
            }
        }
}

- (void)addAudioProcessingTap:(AVAssetTrack *)track {
    MTAudioProcessingTapRef tap;
    MTAudioProcessingTapCallbacks callbacks;
    callbacks.version = kMTAudioProcessingTapCallbacksVersion_0;
    callbacks.clientInfo = (__bridge void *)(self);
    callbacks.init = init;
    callbacks.prepare = prepare;
    callbacks.process = process;
    callbacks.unprepare = unprepare;
    callbacks.finalize = finalise;

    // more tap setup...

    AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];

    AVMutableAudioMixInputParameters *inputParams = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:audioTrack];
    [inputParams setAudioTapProcessor:tap];
    [audioMix setInputParameters:@[inputParams]];

    [[[self player] currentItem] setAudioMix:audioMix];
}

Все идет нормально. Все это работает, я мог найти правильный трек и настроить inputParams, audioMix и т. Д. Но, к сожалению, единственный вызываемый обратный вызов - это обратный вызов init. Никто из других не будет стрелять в любой момент.

Я пробовал разные (виды) потоковых источников, один из которых - официальный поток Apple HLS:http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8

Ответы на вопрос(2)

Ваш ответ на вопрос