MPMediaItem и iTunes Match - PullRequest
       37

MPMediaItem и iTunes Match

29 голосов
/ 16 ноября 2011

У меня есть приложение, которое использует API библиотеки iPod для доступа к базе данных песен в iOS.С выходом iTunes Match любая песня, отсутствующая на устройстве, не сможет быть загружена.Есть ли способ, которым я прошу скачать песню?Возможно, с использованием нового API iCloud?

Редактировать: Для ясности я не спрашиваю, как загружать песни с iTunes Match с помощью iPhone.IOS SDK обеспечивает доступ к библиотеке iPod через MPMediaQuery / MPMediaItems.На устройстве iOS с включенным iTunes Match песни, находящиеся в вашей библиотеке iTunes Match, но не локальные на устройстве, возвращаются через MPMediaQuery, однако для флага MPMediaItems для флага «exportable» установлено значение false.Когда я получаю доступ к этим песням в приложении Музыка, они автоматически загружаются.Я хотел бы запустить ту же автоматическую загрузку через MPMediaItem.

Я видел элементы в iTunes Match, на которые ссылаются как на часть iCloud, и есть новый раздел iCloud в iOS 5 SDK.Однако, насколько я понимаю, я могу получать данные только из моего приложения в загруженном виде.Я надеялся, что есть способ через MPMediaItem или использовать URL через iCloud для запуска загрузки iTunes Match.

Ответы [ 4 ]

15 голосов
/ 06 декабря 2011

Я что-то нашел, но это не здорово. Если вы выберете песню, которая будет воспроизводиться через плеер iPod, загрузка начнется. Вы можете получить доступ к плееру iPod с помощью MPMusicPlayerController.

MPMusicPlayerController *mDRMAudioPlayer;
mDRMAudioPlayer = [MPMusicPlayerController iPodMusicPlayer];

MPMediaQuery *assetQuery = [[MPMediaQuery alloc] init];
NSNumber *persistentID = [mediaItem valueForProperty: MPMediaItemPropertyPersistentID];
MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue: persistentID 
                                                                       forProperty: MPMediaItemPropertyPersistentID];
[assetQuery addFilterPredicate: predicate];

[mDRMAudioPlayer setQueueWithQuery: assetQuery];
[mDRMAudioPlayer play];

Нет отзывов о том, действительно ли началась загрузка или нет, или о процессе загрузки, но элемент начнет загружаться, и если у вас хорошее соединение, оно будет воспроизводиться в первый раз (в противном случае вы можете воспроизвести спам и получить доступ к отправной).

7 голосов
/ 11 марта 2013

MPMediaItem | iCloud или DRM Защищено

Ссылка выше показывает, как вы можете использовать свойство, представленное в iOS 6, чтобы увидеть, находится ли MPMediaItem в облаке.

MPMediaItemPropertyIsCloudItem

BOOL isCloud = FALSE;

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
    NSNumber *isCloudNumber = [mediaItem valueForProperty:MPMediaItemPropertyIsCloudItem];
    isCloud = [isCloudNumber boolValue];
}
if (isCloud) {
    DebugLog(@"Cloud Asset URL: %@", assetURL);
}

То есть использует макрос, чтобы гарантировать, что только iOS 6 использует тот код, который был добавлен с iOS 6. Ниже приведен макрос.

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

Насколько я могу судить, вы не можете начать загрузку.

7 голосов
/ 06 января 2012

Я только что получил ответ от Apple по поводу этой проблемы (я использовал один из моих инцидентов технической поддержки).

Согласно Apple, iOS SDK в настоящее время не предоставляет никаких API-интерфейсов для инициирования загрузки из iCloud.Мне было поручено подать запрос на улучшение этой функции с помощью инструмента Apple для создания отчетов об ошибках .Я бы посоветовал другим сделать то же самое.

Apple действительно должна обеспечить программную поддержку для загрузки аудио активов из iCloud, учитывая, что iCloud является одной из определяющих функций iOS 5.

3 голосов
/ 31 января 2012

Вот на что обратить внимание. Мое приложение делает обычные [MPMediaQuery albumsQuery], чтобы собрать все альбомы и их песни. Это прекрасно работает, даже если вся музыкальная библиотека состоит из материалов iTunes Match, большинство из которых все еще находится в облаке. Но есть одна проблема:

Если в этот момент воспроизводится песня, и если эта песня была в облаке, так что теперь она загружается, то эта песня и следующая песня в альбоме отсутствуют из результата [MPMediaQuery albumsQuery]. Вероятно, это потому, что эти песни «в пути»: они оба частично загружены. (Я предполагаю, что две песни всегда загружаются, поэтому, когда первая заканчивается, можно плавно перейти к следующей.)

Более того, воспроизведение и, следовательно, загрузка песни вызывает MPMediaLibraryDidChangeNotification, хотя «оглавление» библиотеки фактически не изменилось.

Я не вижу никакого способа обойти это, так как нет другого способа запросить библиотеку. Apple должна исправить систему и API, чтобы учесть существование iTunes Match. К сожалению, я не понимаю, что они работают над этим для iOS 5.1 ...

...