2015-03-03 3 views
1

Я использую AVPlayer для потоковой передачи AAC аудио с внешнего сервера через HTTP, как это:задержка AVPlayer при потоковой передаче AAC аудио через HTTP

AVPlayer *player = [[AVPlayer alloc] initWithURL:[NSURL URLWithString:myStreamURL]]; 
[player play]; 

Этот метод работает (он действительно играет аудио), но не так, Я хочу, чтобы он работал. Проблема в том, что после вызова метода воспроизведения очень длительная (30 секунд), тогда я должен ждать 30 секунд, глядя на вращающееся «загружающее колесо» в строке состояния, и звук воспроизводится нормально, но всегда после этой задержки, а не ранее.

Я думаю, что он фактически загружает аудио и воспроизводит его после него, а не передает его.

Я пока не понял, как решить эту проблему, поэтому любая помощь будет оценена по достоинству.

Заранее спасибо.

ответ

4

Это зависит от аудиосервера, но то, что я делаю с AVPlayer, - это наблюдать за свойством player.currentItem.status от KVO. Когда он станет AVPlayerItemStatusReadyToPlay, вызовите prerollAtRate. Затем начните воспроизведение в своем обработчике завершения.

[player prerollAtRate:1.0 completionHandler:^(BOOL finished){ 
    if (finished) { 
     [player play]; 
    } 
}]; 

Во всяком случае, первое, что рекомендуется соблюдать "status", "currentItem.status" и "currentItem.loadedTimeRanges" основных путей на экземпляре AVPlayer, и зарегистрировать их, когда и как они меняются. Вы увидите, какая часть занимает много времени.

+1

Вы сохранили мой 4-часовой помощник! отличная работа! – iremk

+1

Жаль, что я мог бы это сделать дважды! – NSTJ

Смежные вопросы