Игра носителей, в фоновом режиме используя Основу AV на iOS
Q: Как я гарантирую, что мои носители будут продолжать играть при использовании Основы AV, в то время как мое приложение в фоновом режиме?
A: Необходимо объявить, что приложение играет слышимое содержание, в то время как в фоновом режиме, и присваивают надлежащую категорию аудио сеансу. См. также Специальные замечания для Видео Носителей.
Объявите, что Ваше приложение играет Слышимое Содержание в то время как в фоновом режиме
Во-первых, объявите, что Ваше приложение предоставляет определенные фоновые услуги и должно быть позволено продолжать работать в то время как в фоновом режиме. Чтобы сделать это, добавьте UIBackgroundModes введите файл своего приложения Info.plist. Его значение является массивом, содержащим одну или более строк, идентифицирующих который фоновые задачи Ваша поддержка приложений. Укажите строковое значение audio указать приложение играет слышимое содержание пользователю в то время как в фоновом режиме:

Перед iOS 5.0 необходимо было решить в AirPlay позволить носителям быть, чтобы быть переданными потоком к дисплеям высокой четкости и высокочастотным аудиосистемам. Подробные данные для выбора в и выбора из AirPlay варьируются в зависимости от метода воспроизведения носителей. Для получения дополнительной информации см. Обзор AirPlay.
Установка аудио категории сеанса
Необходимо присвоить надлежащую категорию аудио сеансу для обеспечения аудио игр даже заблокированным экраном и набором переключателя Ring/Silent к тихому. Вы не можете полагаться на аудио сеанс по умолчанию, категория которого AVAudioSessionCategorySoloAmbient (или эквивалентно, kAudioSessionCategory_SoloAmbientSound).
Для воспроизведения для продолжения, когда экран блокирует, или когда переключатель Ring/Silent установлен в тихий используйте AVAudioSessionCategoryPlayback (или эквивалент kAudioSessionCategory_MediaPlayback) категория. Перечисление 1 демонстрирует, как инициализировать аудио сеанс Вашего приложения с AVAudioSessionCategoryPlayback категория.
Перечисление 1 , Устанавливающее аудио категорию для разрешения воспроизведение, когда экран блокирует или когда переключатель Ring/Silent установлен в тихий.
#import <AVFoundation/AVFoundation.h> |
#import <AudioToolbox/AudioToolbox.h> |
AVAudioSession *audioSession = [AVAudioSession sharedInstance]; |
NSError *setCategoryError = nil; |
BOOL success = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError]; |
if (!success) { /* handle the error condition */ } |
NSError *activationError = nil; |
success = [audioSession setActive:YES error:&activationError]; |
if (!success) { /* handle the error condition */ } |
См. Аудио Руководство по программированию Сеанса - Аудио Категории Сеанса для получения дополнительной информации о доступных аудио категориях сеанса.
Специальные замечания для видео носителей
Если AVPlayerтекущий элемент выводит на экран видео на дисплее устройства, воспроизведении AVPlayer когда приложение отправляется в фон, автоматически приостанавливается. Существует два способа предотвратить эту паузу:
Отключите видеотреки в элементе проигрывателя (только основанное на файле содержание). См. Перечисление 2.
Удалите
AVPlayerLayerот его связанногоAVPlayer(установитеAVPlayerLayerplayerсвойство к нолю). См. Перечисление 3.
Перечисление 2 , Запрещающее видеотреки в элементе проигрывателя.
#import <AVFoundation/AVFoundation.h> |
AVPlayerItem *playerItem = <#Get your player item#>; |
NSArray *tracks = [playerItem tracks]; |
for (AVPlayerItemTrack *playerItemTrack in tracks) |
{ |
// find video tracks |
if ([playerItemTrack.assetTrack hasMediaCharacteristic:AVMediaCharacteristicVisual]) |
{ |
playerItemTrack.enabled = NO; // disable the track |
} |
} |
Перечисление 3 Удаляет/Восстанавливает AVPlayerLayer и его связанное AVPlayer.
#import <UIKit/UIKit.h> |
#import <AVFoundation/AVFoundation.h> |
@interface MyPlayerLayerView : UIView |
@end |
@implementation MyPlayerLayerView |
- (AVPlayerLayer *)playerLayer { |
return (AVPlayerLayer *)[self layer]; |
} |
+ (Class)layerClass { |
return [AVPlayerLayer class]; |
} |
@end |
@interface MyAppDelegate : UIResponder <UIApplicationDelegate> |
... |
@end |
@implementation MyAppDelegate |
... |
/* Remove the AVPlayerLayer from its associated AVPlayer |
once the app is in the background. */ |
- (void)applicationDidEnterBackground:(UIApplication *)application { |
MyPlayerLayerView *playerView = <#Get your player view#>; |
[[playerView playerLayer] setPlayer:nil]; // remove the player |
} |
/* Restore the AVPlayer when the app is active again. */ |
- (void)applicationDidBecomeActive:(UIApplication *)application { |
MyPlayerLayerView *playerView = <#Get your player view#>; |
[[playerView playerLayer] setPlayer:_player]; // restore the player |
} |
... |
@end |
История версии документа
| Дата | Примечания |
|---|---|
| 12.02.2014 | Добавленный фрагмент кода, показывающий, как удалить AVPlayer из AVPlayerLayer. Указанное использование приложения делегирует applicationDidEnterBackground как рекомендуемый метод для добавления кода для предотвращения видео паузы. Реорганизация части материала Вопросов и ответов. Другие разные изменения. |
| 29.04.2013 | Обновленные специальные замечания для воспроизведения Прямых трансляций HTTP. |
| 11.04.2013 | Если фрагменты кода, чтобы показать, как отключить проигрыватель видеотреки элемента. Добавленные специальные замечания для воспроизведения Прямых трансляций HTTP. Другие разные изменения. |
| 06.03.2012 | Обновленный для включения информации о AirPlay. |
| 27.07.2010 | Новый документ, обсуждающий носители игры, в фоновом режиме используя Основу AV на iOS |