2014-01-28 4 views
3

Я делаю iPad-приложение (iOS7, XCode5).mpmovieplayercontroller: Игра в фоновом режиме

Я играю поток HLS (m3u8), который содержит видео и аудио. Когда устройство переходит на задний план, оно перестает воспроизводиться. Есть ли способ отсоединить звук от видео и просто воспроизвести видео, пока он находится в фоновом режиме? Кажется, Apple не хочет, чтобы вы играли в фоновом режиме.

Любые идеи? Благодарю.

+0

Вы можете воспроизводить только аудиофайлы (mp3, wav и т. Д.) И не воспроизводить видеофайлы в фоновом режиме. Воспроизведение видео в фоновом режиме не имеет смысла. Какой смысл, если их никто не увидит? Если вы пытаетесь просто воспроизвести звук, вам нужно либо получить звуковой файл из фильма, либо воспроизвести статический аудиофайл. –

+0

Ya, я знаю, это не имеет смысла. Это просто наш поток видео/звука - поток HLS, насколько я знаю, я не могу просто взять звук из этого. – Jonovono

+0

Эта ссылка показывает, как вы можете воспроизводить аудио в фоновом режиме. http://stackoverflow.com/questions/15540726/ios-mpmovieplayercontroller-playing-audio-in-background – user2874682

ответ

5

Это возможно, но не без толики с пропуском при воспроизведении - видео автоматически остановится, но так как ваше приложение в основном по-прежнему работает в фоновом режиме вы можете запустить видео снова вручную:

В вашем вид контроллера, который управляет игрок добавить:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; 

Затем добавьте следующий метод:

- (void)applicationDidEnterBackground:(NSNotification*)note { 
    if (!_callCenter.currentCalls && self.currentPlayer.continuePlaybackInBackground == YES) { 
     double delayInSeconds = 0.1; 
     dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
     dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
      // call play on your MPMoviePlayerController 
     }); 
    } 
} 

я обнаружил, что я должен был использовать dispatch_after, потому что в противном случае он попытался бы запустить воспроизведение фильма еще до того, как ОС остановится.

+0

Спасибо. Но хм, я не могу заставить эту работу работать с MPMoviePlayerController. У меня нет togglePlaybackToState, что я могу сказать? Я что-то упустил – Jonovono

+0

Это был пример, я удалил код и заменил его комментарием. Здесь вы должны просто вызвать 'play' на свой экземпляр MPMoviePlayerController. – runmad

+0

Используйте AVSession для фоновой музыки (даже если вы используете MPMovePlayerController для воспроизведения видео или аудио). Если вы также хотите использовать кнопки центра управления, используйте события дистанционного управления. Не забудьте добавить [[UIApplication sharedApplication] beginReceivingRemoteControlEvents] в ViewDidLoad. – khunshan

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