Я пытаюсь иметь только аудио плеер только в моем приложении, которое может играть в фоновом режиме. Первоначально я использовал 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]];
Почему, по вашему мнению, MPMoviePlayerController не поддерживает поиск в связи с потоковой HTTP? – Till
Хороший вопрос. Я думал, что перемещение точки воспроизведения в местоположение было приватным методом, но пересмотр спецификации протокола MPMediaPlayback, по-видимому, предполагает разные. Не знаю, почему он не работает, но я снова посмотрю. –
Будьте уверены, это работает как шарм. : D – Till