Использование MPMediaItems с AVAudioPlayer - PullRequest
28 голосов
/ 07 марта 2011

Можно ли выбрать элементы мультимедиа с помощью MPMediaPickerController, а затем загрузить их в объект AVAudioPlayer?

Ответы [ 4 ]

48 голосов
/ 07 марта 2011

Если 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, если вы привыкли работать с фотографиями и видео.

16 голосов
/ 18 февраля 2013

Просто хотел сказать, что в 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];
}
4 голосов
/ 17 июня 2015

Я хотел добавить (и пока не могу комментировать 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
0 голосов
/ 05 января 2012

Я думаю, вы обнаружите, что [NSBundle mainBundle] ТОЛЬКО ДЛЯ ЧТЕНИЯ.Невозможно записать файлы в приложение, поэтому AVAudioPlayer не будет работать для iPod-Library MPMediaItems!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...