1

Я создаю приложение, которое поддерживает воспроизведение и запись видео (не одновременно, это всего лишь две отдельные функции, которые он предоставляет). Чтобы видео воспроизводилось после того, как приложение заходит на задний план и возвращается, мне пришлось добавить App plays audio элемент в Required background modes в plist (я использую MPMoviePlayerController для воспроизведения).UIImagePickerController и фоновые режимы приложения

Это, однако, вызывает проблемы с моей видеозаписью (я использую для этого UIImagePickerController). В принципе, даже после того, как сборщик уволен (либо с помощью кнопки «Отмена», либо по завершении выбора медиафайла), приложение все еще сохраняет сеанс аудиозаписи.

Если удалить App plays audio элемент из списка свойств, аудио сеанс ImagePickerController останавливает плохое поведение, но я не могу возобновить воспроизведение MPMoviePlayerViewController при переключении на приложение из фонового режима.

Есть ли способ настроить обработку аудио сессии так, чтобы как MPMoviePlayerController, так и UIImagePickerController могли нормально работать?

+0

Я немного смущен, о чем вы говорите. Вы играете видео в приложении, и хотите, чтобы он продолжал играть в фоновом режиме? На какой сессии звукозаписи вы ссылаетесь? Звуковая сессия UIImagePickerController? – brynbodayle

ответ

2

Да, вы можете настроить обработку аудио сессии по желанию: не пытайтесь установить настройку App plays audio.

вместо этого, в вашем коде AppDelegate (который, как правило, в AppDelegate.m от простых проектов мастера в комплект поставки), код поставки в методе applicationWillResignActive:, который остановит воспроизведение в вашем MPMoviePlayerController, а затем использовать applicationDidBecomeActive: возобновить воспроизведение в момент, когда вы приостановили его, если это было необходимо.

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

1

Вы можете поцарапать фоновые режимы и вместо этого использовать уведомления для приостановки/возобновления воспроизведения вашего плеера. См. UIApplicationDidBecomeActiveNotification и UIApplicationWillResignActiveNotification в UIApplication class reference.

Вы можете заблокировать некоторый код и посмотреть, как это реализовано в this class. Вот некоторые из соответствующих кода этого класса:

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(_didBecomeActive:) 
               name:UIApplicationDidBecomeActiveNotification 
               object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(_willResignActive:) 
              name:UIApplicationWillResignActiveNotification 
              object:nil]; 

- (void) _didBecomeActive:(NSNotification*)notification { 
    if (_wasPlaying) { 
    [_movieController play]; 
    } 
} 

- (void) _willResignActive:(NSNotification*)notification { 
    _wasPlaying = _movieController.currentPlaybackRate != 0.0; 
    if (_wasPlaying) { 
    [_movieController pause]; 
    } 
} 
Смежные вопросы