【发布时间】:2011-03-07 16:48:47
【问题描述】:
是否可以使用 MPMediaPickerController 选择媒体项,然后将它们加载到 AVAudioPlayer 对象中?
【问题讨论】:
标签: iphone objective-c
是否可以使用 MPMediaPickerController 选择媒体项,然后将它们加载到 AVAudioPlayer 对象中?
【问题讨论】:
标签: iphone objective-c
如果MPMusicPlayerController 不能满足您的需求,您可以copy the audio to your local bundle,这样您就可以使用AVAudioPlayer。
编辑
您基本上有三个选项来播放用户 iPod 库中的音频:MPMediaPlayer、AVPlayer 和 AVAudioPlayer。
以下是MPMediaPlayer 和AVPlayer 的示例:
- (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。
【讨论】:
只是想说,在 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];
}
【讨论】:
我想补充一下(我还不能评论 SO),它似乎在 iOS 8 中,也许在此之前,存储在 iCloud 上的歌曲没有属性 assetURL 的值并返回 @ 987654322@ 为[npItem valueForProperty:MPMediaItemPropertyAssetURL]。
这是一个示例输出:
MPMediaItem *npItem = self.musicPlayerController.nowPlayingItem;
NSLog(@"Song Title: %@\n assetURL: %@\n Cloud Item: %d", npItem.title, [npItem valueForProperty:MPMediaItemPropertyAssetURL], npItem.cloudItem)
// Log Output
Song Title: Time We Had
assetURL: (null)
Cloud Item: 1
Song Title: The Quiet
assetURL: ipod-library://item/item.m4a?id=1529654720874100371
Cloud Item: 0
【讨论】:
我想你会发现[NSBundle mainBundle] 是只读的。无法将文件写入APP,因此AVAudioPlayer不适用于iPod-Library MPMediaItems!
【讨论】: