Pull to refresh

iPhone. Проигрывание аудио в фоновом режиме

Development for iOS *
Надеюсь что кому-то поможет это небольшое руководство по написанию iPhone-клиента для интернет-радио. Недавно мне понадобилось написать такое. В самообразовательных целях. Постараюсь охватить тему как можно шире в будущем, но сейчас хотелось бы сосредоточится на конкретном моменте, который вызвал у меня затруднения не далее чем сегодня, а именно на проигрывании радио в фоновом режиме.

Для этого нам потребуются пара нехитрых манипуляций.
Во-первых, нужно сообщить нашему приложению, о том, что оно должно проигрывать музыку даже после нажатия на «HOME»
Делается это в файле Info.plist проекта:

Выбираем файл в Project Navigator
image

Щёлкаем правой кнопкой мыши по свободному месту и выбираем «Add row»
image

В поле «Key» введём «Required background modes»,
image

это создаст нам массив, в качестве значения для первого элемента мы добавим «App plays audio».
image

Всё, наша программа знает что в фоновом режиме она не должна засыпать полностью, а должна продолжать играть музыку.
Другой, быстрый способ сделать тоже самое это открыть Info.plist обычным редактором(по сути это просто XML-файл) и дописать
<key>UIBackgroundModes</key>
	<array>
		<string>audio</string>
	</array>


Теперь инициализируем наш плеер.
Вообще в iOS SDK есть несколько различных классов для работы со звуком. Я сначала использовал AVQueuePlayer, потом решил отдать предпочтение AVPlayer как самому, на мой взгляд, гибкому.
В любом случае AVFoundation вам в помощь, для работы с аудио.

- (void)viewDidLoad {
    [super viewDidLoad];
    // Convert the file path to a URL.
    NSString *urlAddress = @"http://www.example.com/stream";
    //Create a URL object.
    NSURL *urlStream = [NSURL URLWithString:urlAddress];  

    AVPlayer *player = [[AVPlayer alloc] initWithURL:urlStream];    
    //Starts playback
    [player play];
}


А теперь создаём сессию:
    // очень важная строчка, она должна быть ПОСЛЕ инициализации плеера.
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];


Вот в принципе и всё, плеер умеет и будет работать в фоновом режиме. Вы можете свернуть программу нажатием на «Home» и музыка не прекратится.

И самый важный момент: воспроизведение фонового аудио почему-то не работает в симуляторе, поэтому запускать и тестировать обязательно на девайсе.
Tags:
Hubs:
Total votes 53: ↑40 and ↓13 +27
Views 18K
Comments Comments 34