将MPMediaItems与AVAudioPlayer一起使用

时间:2011-03-07 16:48:48

标签: iphone objective-c

是否可以使用MPMediaPickerController选择媒体项目,然后将它们加载到AVAudioPlayer对象中?

4 个答案:

答案 0 :(得分:48)

如果MPMusicPlayerController无法满足您的需求,您可以copy the audio to your local bundle,以便您可以使用AVAudioPlayer

修改

您基本上有三个选项可以播放用户iPod库中的音频:MPMediaPlayerAVPlayerAVAudioPlayer

以下是MPMediaPlayerAVPlayer的示例:

- (void) mediaPicker: (MPMediaPickerController *) mediaPicker
   didPickMediaItems: (MPMediaItemCollection *) collection {


    MPMediaItem *item = [[collection items] objectAtIndex:0];
    NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];

    [self dismissModalViewControllerAnimated: YES];

    // Play the item using MPMusicPlayer

    MPMusicPlayerController* appMusicPlayer = [MPMusicPlayerController applicationMusicPlayer];

    [appMusicPlayer setQueueWithItemCollection:collection];
    [appMusicPlayer play];


    // Play the item using AVPlayer

    AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:url];
    AVPlayer *player = [[AVPlayer alloc] initWithPlayerItem:playerItem];
    [player play];  

}

如果由于某种原因需要使用AVAudioPlayer,或者您需要访问音频文件的实际音频数据,则必须先将音频文件复制到应用程序的目录中,然后在那里使用它。如果您习惯使用照片和视频,则AVAsset + AVPlayer内容与ALAsset最相似。

答案 1 :(得分:16)

只是想说,在iOS 6和7中,AVAudioPlayer可以直接从iPod播放文件URL,而无需像Art建议那样将音频数据复制到您的应用目录中。

- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) collection {


    MPMediaItem *item = [[collection items] objectAtIndex:0];
    NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];

    // Play the item using AVPlayer
    self.avAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
    [self.avAudioPlayer play];
}

答案 2 :(得分:4)

我想在iOS 8中添加(并且我无法对SO进行评论),也许之前,存储在iCloud上的歌曲没有属性值{{1}并为assetURL返回null

以下是示例输出:

[npItem valueForProperty:MPMediaItemPropertyAssetURL]

答案 3 :(得分:-3)

我认为你会发现[NSBundle mainBundle]是只读的。无法将文件写入APP,因此AVAudioPlayer无法用于iPod-Library MPMediaItems