Использование MPMediaItems с AVAudioPlayer
Можно ли выбрать элементы мультимедиа с помощью MPMediaPickerController, а затем загрузить их в объект AVAudioPlayer?
4 ответа
Если MPMusicPlayerController
не соответствует вашим потребностям, вы можете скопировать аудио в ваш локальный комплект, чтобы вы могли использовать 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 может воспроизводить URL-адреса файлов непосредственно с iPod, не копируя аудиоданные в каталог приложения, как предложил Арт.
- (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
и вернуться null
за [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]
только для чтения Невозможно записать файлы в приложение, поэтому AVAudioPlayer
не будет работать для iPod-библиотеки MPMediaItems
!