iphone - 在后台播放音频流

Posted

技术标签:

【中文标题】iphone - 在后台播放音频流【英文标题】:iphone - play audio stream in background 【发布时间】:2012-03-26 16:31:03 【问题描述】:

我正在使用 xcode 4.2 并构建一个 iphone 应用程序,并查看打开时播放音频流的视图。 我试图实现的是即使应用程序进入后台也能继续播放。 我尝试了在 *** 或其他地方找到的任何可能的解决方案(并且有很多可用的解决方案),但无法使其正常工作。当应用程序进入后台时,音频停止,当我再次打开应用程序时,音频继续。

在我的 Info.plist 中,我设置了 2 行:Required Background Modes -> App plays audio &Application does not run in background -> NO

我错过了什么?在后台继续播放音频还需要什么? 提前谢谢你。

编辑: 我看到很多关于这个问题的答案,建议使用 AVAudio 框架。 MPMoviePlayerController 是否有可能无法在后台播放流?我应该换成 AVAudio 吗?

编辑 2: 好的,似乎这对我来说太复杂了。我给出了确切的代码,希望这会有所帮助。

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];
    self.navigationItem.title=@"";
    // 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

【问题讨论】:

iOS 5 - play audio file in the background when the app is launched 的可能重复项 谢谢帕思。在这个 Q 中使用的是 AVAudioPlayer,而不是 MPMoviePlayerController。你觉得没什么区别? 问题是一样的。只是方法不同。如果适合你,你可以改变你的方法。 【参考方案1】:

检查您的音频会话设置,因为这可能需要额外注意。

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

【讨论】:

您好,感谢您对我的问题的打扰。 AVAudioSession 与 MPMoviePlayerController 有什么关系?你能解释一下吗?无论如何,添加您的代码没有任何区别。 @CrisDeBlonde 你真的应该检查一下 AudioSession 文档。 最后这似乎是解决方案,但由于某种原因,在模拟器中它不会在后台播放。不过,在设备上测试它就像一个魅力。【参考方案2】:

如何在这个地方偶然发现了详细的编程教程。 http://mobisoftinfotech.com/integrate-music-player-in-iphone/

这应该会在应用内播放音乐,如果您将应用置于后台,也会继续播放。

【讨论】:

以上是关于iphone - 在后台播放音频流的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 停止在后台播放音频

iPhone 上来电后,Phonegap HTML5 音频无法恢复播放

iPhone OS 4 多任务处理 - 在后台播放音频

MPMoviePlayerController 在后台播放音频流

如何在 iPhone/iPad 中播放流音频

在后台播放音频流