2012-06-28 5 views
0

Я пытаюсь иметь только аудио плеер только в моем приложении, которое может играть в фоновом режиме. Первоначально я использовал MPMoviePlayerController, который работал нормально, но проблема заключалась в том, что он не поддерживает поиск вперёд и назад (или с помощью слайдера).Только аудио HLS с iOS

Некоторые записи записываются в течение часа, и если кто-то прерывается во время него и хочет вернуться в место, где они были, они должны начинаться с самого начала. Использование AVAudioCoder показалось мне решением, поэтому я изменил свой код, чтобы обнаружить, что он не работает с URL-адресом, который отсутствует на устройстве.

Я использую Http Live Streaming и имею файл .m3u8. Легко ли реализовать решение для использования файлов .m3u8 и .mp3 из интернет-источника с возможностью изменения места воспроизведения с помощью слайдера. (И как он должен играть в фоновом режиме, я не могу использовать интерфейс MPMoviePlayerController)

Обновление: Назад с помощью MPMoviePlayerController, но какое-то странное поведение. При воспроизведении плейлиста .m3u8 и установке новой позиции значение, заданное при запросе currentPlaybackTime, устанавливается в нужное значение, но звук продолжает воспроизводиться так, как если бы он не прерывался.

При приостановке воспроизведения проигрывателя, а затем установка времени, когда он просто игнорирует его, а также продолжает играть, но по крайней мере «currentPlaybackTime» дает правильную текущую позицию.

ID appDelegate = (iDomsAppDelegate *) [[UIApplication sharedApplication] delegate]; двойной длины = [[appDelegate audioPlayer] duration]; if (длина> 0) { float sliderValue = [_slider value]; двойной раз = слайдерValue/100 * длина;

NSTimeInterval playBackTime = time; 

NSLog(@"Requested time: %f vs current time %f", playBackTime, [[appDelegate audioPlayer] currentPlaybackTime]); 
//[[appDelegate audioPlayer] pause]; 
[[appDelegate audioPlayer] setCurrentPlaybackTime:playBackTime]; 
//[[appDelegate audioPlayer] setInitialPlaybackTime:playBackTime]; 
//[[appDelegate audioPlayer] play]; 
NSLog(@"Requested time: %f vs current time %f (2)", playBackTime, [[appDelegate audioPlayer] currentPlaybackTime]); 

}

Каждый второй я обновляю ярлыки, и это дает мне поведение, как описано выше:

идентификатор AppDelegate = (iDomsAppDelegate *) [[UIApplication sharedApplication] делегат];

двойной раз = [[appDelegate audioPlayer] currentPlaybackTime]; двойной длины = [[appDelegate audioPlayer] duration]; NSLog (@ "Состояние:% i, Время:% f", [[appDelegate audioPlayer] playbackState], [[appDelegate audioPlayer] currentPlaybackTime]); если (длина> 0) { double pos = время/длина * 100; [_slider setValue: (float) pos]; [_slider setEnabled: true];

NSInteger seconds = (int) length % 60; 
NSInteger minutes = ((int) length/60) % 60; 

double playableDuration = [[appDelegate audioPlayer] playableDuration]; 
if(playableDuration > 0 && playableDuration < length){ 
    int downloaded = (int)((float)((float)playableDuration/(float)length) * 100); 
    [_unknownLength setText:[NSString stringWithFormat:@"Total duration: %02i:%02i (%02i%% downloaded)", minutes, seconds, downloaded]]; 
} else { 
    [_unknownLength setText:[NSString stringWithFormat:@"Total duration: %02i:%02i", minutes, seconds]];  
} 

} еще { [_slider setEnabled: ложь]; [_unknownLength setText: [NSString stringWithFormat: @ "Общая длительность неизвестна"]];
}

NSInteger seconds = (int) time% 60; NSInteger minutes = ((int) time/60)% 60; [_position setText: [NSString stringWithFormat: @ "% 02i:% 02i", minutes, seconds]];

+0

Почему, по вашему мнению, MPMoviePlayerController не поддерживает поиск в связи с потоковой HTTP? – Till

+0

Хороший вопрос. Я думал, что перемещение точки воспроизведения в местоположение было приватным методом, но пересмотр спецификации протокола MPMediaPlayback, по-видимому, предполагает разные. Не знаю, почему он не работает, но я снова посмотрю. –

+0

Будьте уверены, это работает как шарм. : D – Till

ответ

0

Сегментация для аудио только для FFMPEG не работает правильно, но теперь фиксируется в голове репликации GIT. Использование MPMoviePlayer-контроллера прекрасно работает сейчас, что позволяет быстро находить шаги по размеру сегмента.