Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS是否通过AVPlayer将音频播放添加到操作系统默认播放器?_Ios_Objective C_Iphone_Avaudioplayer - Fatal编程技术网

iOS是否通过AVPlayer将音频播放添加到操作系统默认播放器?

iOS是否通过AVPlayer将音频播放添加到操作系统默认播放器?,ios,objective-c,iphone,avaudioplayer,Ios,Objective C,Iphone,Avaudioplayer,因此,我们的想法是——当我们在iPhone的音乐应用程序中播放音频并按下home按钮,然后从屏幕底部滑动时,我们可以看到音频在默认操作系统播放器中播放,带有播放/暂停控制和音频继续播放 现在我需要做的是,在我的应用程序中使用AVAudioPlayer播放音频,如果用户按下home按钮,音频需要像音乐应用程序一样继续播放。 但我不知道如何在OS默认播放器中添加音频?如有任何帮助或建议,将不胜感激 编辑:我需要使用流媒体播放音频,因此我想我需要使用AVPlayer而不是AVAudioPlayer您可

因此,我们的想法是——当我们在iPhone的音乐应用程序中播放音频并按下home按钮,然后从屏幕底部滑动时,我们可以看到音频在默认操作系统播放器中播放,带有播放/暂停控制和音频继续播放

现在我需要做的是,在我的应用程序中使用
AVAudioPlayer
播放音频,如果用户按下home按钮,音频需要像音乐应用程序一样继续播放。 但我不知道如何在OS默认播放器中添加音频?如有任何帮助或建议,将不胜感激


编辑:我需要使用流媒体播放音频,因此我想我需要使用
AVPlayer
而不是
AVAudioPlayer
您可以使用MPMovieplayerController,因为您很可能会使用M3U8播放列表

这是文件

但基本上是这样的:

初始化MPMoviePlayerController,分配文件类型(流),放置源url,并将其显示在视图堆栈中


对于背景音频,您必须使用AudioSession(如本答案中所示)

您可以将其作为背景音频任务来执行,以便即使在用户按下home(主页)按钮且您的应用程序进入后台后,音频仍能继续播放。首先创建一个音频会话。然后在viewDidLoad方法中设置AVPlayerObject数组和AVQueuePlayer。Ray Wenderlich有一个很棒的教程详细讨论了所有这些。您可以设置回调方法(ObserverMethod),以便应用程序在-(void)observeValueForKeyPath中流式传输时发送额外的音频数据

下面是代码的外观(来自Ray Wenderlich的教程):

在viewDidLoad中:

// Set AVAudioSession
NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance]     setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];

// Change the default output audio route
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
  sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);

NSArray *queue = @[
[AVPlayerItem playerItemWithURL:[[NSBundle mainBundle]  URLForResource:@"IronBacon" withExtension:@"mp3"]],
[AVPlayerItem playerItemWithURL:[[NSBundle mainBundle] URLForResource:@"FeelinGood" withExtension:@"mp3"]],
[AVPlayerItem playerItemWithURL:[[NSBundle mainBundle] URLForResource:@"WhatYouWant" withExtension:@"mp3"]]];

self.player = [[AVQueuePlayer alloc] initWithItems:queue];
self.player.actionAtItemEnd = AVPlayerActionAtItemEndAdvance;

[self.player addObserver:self
              forKeyPath:@"currentItem"
                 options:NSKeyValueObservingOptionNew
                 context:nil];
在回调方法中:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    if ([keyPath isEqualToString:@"currentItem"])
    {
        AVPlayerItem *item = ((AVPlayer *)object).currentItem;
        self.lblMusicName.text = ((AVURLAsset*)item.asset).URL.pathComponents.lastObject;
        NSLog(@"New music name: %@", self.lblMusicName.text);
    }
}
不要忘记将视图控制器的私有API中的成员变量添加到实现文件中:

@interface TBFirstViewController ()

@property (nonatomic, strong) AVQueuePlayer *player;
@property (nonatomic, strong) id timeObserver; 
@end

那么,我指的是“AVPlayer”或“MPMoviePlayer”,最好的或推荐的方式是什么呢。我在这两项服务中都没有任何经验,请推荐。嗨,罗布,请再帮我一个忙。。如果我使用MPMovieplayerController,那么我必须显示电影播放器控制器,但我不想在我的视图中显示任何播放器。我有播放/暂停按钮和一些其他东西的简单视图,当用户点击播放按钮时,我只想播放音频,其他什么都不想。