У меня есть приложение, которое транслирует музыку с использованием класса AudioStreamer Мэттом Галлахером. Это прекрасно работает как фоновый процесс, за исключением того, что я хочу, чтобы вы могли пропустить следующую песню после завершения потока. К сожалению, эта часть не работает. Первоначально у меня был таймер, который контролировал поток, но понял, что, когда фоны приложения этого таймера больше не работают. Так что я попытался добавить делегат обратного вызова в функции чтения пакета:iPhone: потоковая музыка во время приложения в фоновом режиме
void ASReadStreamCallBack(CFReadStreamRef aStream, CFStreamEventType eventType, void* inClientInfo)
{
AudioStreamer* streamer = (AudioStreamer *)inClientInfo;
double percent = [streamer progress]/[streamer duration];
if(percent>=0.98 || (percent>=0.95 && [streamer isIdle])){
if([streamer.delegate respondsToSelector:@selector(didFinishPlayingStream:)]){
[streamer.delegate didFinishPlayingStream:streamer];
streamer.delegate = nil;
}
}
[streamer handleReadFromStream:aStream eventType:eventType];
}
Это прекрасно работает, когда приложение не находится на переднем плане, но больше не работает, когда приложение в фоновый. Метод делегата в основном отправляет запрос на получение URL-адреса потока для следующей песни, а затем после его создания создается новый класс AudioStreamer
Как ваше приложение играет в фоновом режиме? –