I know that there are a lot questions like mine but nothing is working for me.
I'm trying to let the AVPlayer
keep playing when i exit the app, i have implemented the following Singleton Class
:
.h file:
#import <AVFoundation/AVFoundation.h>
#import <Foundation/Foundation.h>
@interface LiveStreamSingleton : NSObject<AVAudioPlayerDelegate>{
}
+(LiveStreamSingleton *)sharedInstance;
-(void)playStream;
-(void)stopStream;
-(bool)status;
@end
.m file:
#import "LiveStreamSingleton.h"
static LiveStreamSingleton *sharedInstance = nil;
@interface LiveStreamSingleton (){
AVPlayer *audioPlayer;
}
@end
@implementation LiveStreamSingleton
+ (LiveStreamSingleton*) sharedInstance {
static dispatch_once_t _singletonPredicate;
static LiveStreamSingleton *_singleton = nil;
dispatch_once(&_singletonPredicate, ^{
_singleton = [[super allocWithZone:nil] init];
});
return _singleton;
}
+ (id) allocWithZone:(NSZone *)zone {
return [self sharedInstance];
}
-(void)playStream{
//NSError *error = nil;
NSURL *urlStream;
NSString *urlAddress = @"http://198.178.123.23:8662/stream/1/;listen.mp3";
urlStream = [[NSURL alloc] initWithString:urlAddress];
AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:urlStream options:nil];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:avAsset];
audioPlayer = [AVPlayer playerWithPlayerItem:playerItem];
//This enables background music playing
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
audioPlayer = [AVPlayer playerWithURL:urlStream];
if(!audioPlayer.error){
NSLog(@"Trying to play from singleton!");
[audioPlayer play];
NSLog(@"rate: %f",audioPlayer.rate);
}
}
-(void)stopStream{
NSLog(@"Trying to stop from singleton!");
[audioPlayer pause];
}
-(bool)status{
bool stat;
if(audioPlayer.rate > 0){
stat = true;
}else{
stat = false;
}
return stat;
}
@end
I have set the [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
for playing in the background, but i tried it on my real ipad, it's not working.
Any ideas?
add a key named Required background modes in property list (.plist) file ..
as following picture..
and add following code in
AppDelegate.h
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>
AppDelegate.m
in application didFinishLaunchingWithOptions
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
import AVFoundation
import AudioToolbox
class AppDelegate: UIResponder, UIApplicationDelegate
{
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
{
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
}
catch {
}
}
}
Hope it helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With