Использование 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!

Другие вопросы по тегам