2012-03-26 52 views
5

Tôi đang sử dụng xcode 4.2 và tạo ứng dụng iphone và có chế độ xem khi mở được phát một luồng âm thanh.
Những gì tôi cố gắng đạt được là có ứng dụng tiếp tục phát ngay cả khi nó đi vào nền.
Tôi đã thử bất kỳ giải pháp có thể nào mà tôi đã tìm thấy trong stackoverflow hoặc ở nơi khác (và có nhiều sẵn có), nhưng không thể làm cho nó hoạt động. Khi ứng dụng vào nền âm thanh dừng lại, khi tôi mở lại ứng dụng, âm thanh sẽ tiếp tục.iphone - phát dòng âm thanh ở chế độ nền

Trong ia Info.plist tôi đã thiết lập 2 hàng:
Required Background Modes -> App plays audio &
Application does not run in background -> NO

am i thiếu gì? những gì khác là cần thiết để tiếp tục chơi âm thanh trong nền?
Cảm ơn bạn trước.

EDIT: Tôi thấy nhiều câu trả lời về vấn đề này, đề xuất việc sử dụng khung AVAudio. Có bất kỳ cơ hội nào mà MPMoviePlayerController không thể phát luồng trong nền không? Tôi có nên đổi sang AVAudio không?

CHỈNH SỬA 2:
Ok, có vẻ quá phức tạp để tôi đạt được. Tôi đưa ra mã chính xác, hy vọng điều này sẽ giúp ích.

RadioStreamer.h

#import <UIKit/UIKit.h> 
#import "MediaPlayer/MediaPlayer.h" 
@interface RadioStreamer : UIViewController { 
    MPMoviePlayerController *player; 
    IBOutlet UIButton *playButton; 
    IBOutlet UIButton *pauseButton; 
} 
@property (nonatomic, retain) MPMoviePlayerController *player; 
@property (nonatomic, retain) IBOutlet UIButton *playButton; 
@property (nonatomic, retain) IBOutlet UIButton *pauseButton; 

- (IBAction)playButtonPressed:(id)button; 
- (IBAction)pauseButtonPressed:(id)button; 
- (void) playAudio; 
- (void) pauseAudio; 
@end 

RadioStreamer.m

#import "RadioStreamer.h" 
#import "tabbartestAppDelegate.h" 

@implementation RadioStreamer 
@synthesize player; 
@synthesize playButton; 
@synthesize pauseButton; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    return self; 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [email protected]""; 
    // Do any additional setup after loading the view from its nib. 

    if (!self.player) { 
     player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://s6.onweb.gr:8006/listen.pls"]]; 
     player.movieSourceType = MPMovieSourceTypeStreaming; 
     player.view.frame = CGRectMake(55, 180, 200, 30); 
     player.backgroundView.backgroundColor = [UIColor clearColor]; 
     player.view.backgroundColor = [UIColor clearColor]; 
     [self.view addSubview:player.view]; 
     [player play]; 
    } 
} 

- (void) playAudio { 
    if (player.playbackState != MPMoviePlaybackStatePlaying){ 
     [player play]; 
    } 
} 

- (void) pauseAudio { 
    if (player.playbackState == MPMoviePlaybackStatePlaying) { 
     [player pause]; 
    } 
} 

- (IBAction)playButtonPressed:(id)button { 
    [self playAudio]; 
} 

- (IBAction)pauseButtonPressed:(id)button { 
    [self pauseAudio]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
} 


- (void)dealloc { 
    [self.player release]; 
    [self.playButton release]; 
    [self.pauseButton release]; 
    self.player = nil; 
    self.playButton = nil; 
    self.pauseButton = nil; 
} 

@end 
+0

bản sao có thể có của [iOS 5 - phát tệp âm thanh trong nền khi ứng dụng được khởi chạy] (http://stackoverflow.com/questions/9199095/ios-5-play-audio-file-in-the-background -when-the-app-is-launch) –

+0

Cảm ơn Parth. Trong Q AVAudioPlayer này được sử dụng, không phải MPMoviePlayerController. Bạn nghĩ rằng nó không có sự khác biệt? – CrisDeBlonde

+0

Câu hỏi là như nhau .. Cách tiếp cận duy nhất là khác nhau. Bạn có thể thay đổi cách tiếp cận của bạn, nếu điều đó làm việc cho bạn. –

Trả lời

6

Kiểm tra cài đặt phiên âm thanh của bạn như mà có thể cần được chăm sóc thêm.

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback 
             error:nil]; 
[[AVAudioSession sharedInstance] setActive:YES 
            error:nil]; 
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; 
+0

Xin chào, cảm ơn vì đã làm phiền với câu hỏi của tôi. AVAudioSession phải làm gì với MPMoviePlayerController? Bạn có thể giải thích được không? Nhưng dù sao, việc thêm mã của bạn không tạo ra bất kỳ sự khác biệt nào. – CrisDeBlonde

+0

@CrisDeBlonde bạn thực sự nên kiểm tra tài liệu AudioSession. – Till

+1

Cuối cùng điều này có vẻ là giải pháp, nhưng vì một số lý do, trong Simulator nó không phát trong nền. Thử nghiệm nó trên thiết bị mặc dù, hoạt động như một say mê. – CrisDeBlonde

Các vấn đề liên quan