Использование MPMediaItems с AVAudioPlayer
Можно ли выбрать элементы мультимедиа с помощью MPMediaPickerController, а затем загрузить их в объект AVAudioPlayer?
- Как я могу заставить UITextField двигаться вверх, когда клавиатура присутствует?
- Удалить HTML-tags из NSString на iPhone
- Как читать трассировки стека объектов-c
- всплывающее меню iPhone, как iPad popover?
- Поиск расстояния от значения RSSI устройства Bluetooth с низким энергопотреблением
- Изменение цвета фона в UIAlertView?
- Неверное завершение кода Xcode 6 не работает
- API, чтобы определить, работает ли на iPhone или iPad
Если 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
то причине необходимо использовать AVAudioPlayer
или вам необходим доступ к фактическим аудиоданным аудиофайла, сначала необходимо скопировать аудиофайл в каталог вашего приложения, а затем работать с ним. AVAsset
+ AVPlayer
– самая близкая аналогия с ALAsset
если вы привыкли работать с фотографиями и видео.
Просто хотелось сказать, что похоже, что в iOS 6 и 7 AVAudioPlayer может воспроизводить URL-адреса файлов непосредственно с iPod без необходимости копировать аудиоданные в каталог приложений, как предлагалось в 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
и возвращают значение 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]
READ-ONLY. Невозможно записать файлы в APP, поэтому AVAudioPlayer
не будет работать для MPMediaItems
-библиотеки MPMediaItems
!