iTunes Match + AVplayer + MPMediaQuery не работает

Я разрабатываю приложение, в котором используются AVPlayer, MPMediaItem и MPMediaQuery. Работает, пока соответствует Itunes. Мы начинаем с MPMediaQuery, затем выполняем некоторую фильтрацию, оставляя некоторые MPMediaItems, затем мы использовали AVPlayer, потому что: 1. - мы также воспроизводим шумы во время воспроизведения песни 2. - нам нужно запрограммировать воспроизведение / остановку событий с ipod.

Все эти функции в настоящее время работают, за исключением случаев, когда в библиотеке ipod включена функция itunes match. Даже когда статус AVPlayer проигрывается, звука нет. Очевидно, что загрузка песни из iCloud не запускается.

Вся информация, которая у меня есть о совпадении с itunes на данный момент, представлена ​​в этом сообщении: MPMediaItem и iTunes Match

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

У меня есть две идеи, как решить эту проблему: A. Найти способ проверить, загружена ли уже песня и доступна ли она в библиотеке для воспроизведения с помощью AVPlayer. Если песня недоступна, сообщите пользователю, что мы не поддерживаем недоступные песни. Б. Найдите способ запустить загрузку песни непосредственно перед тем, как она станет следующим элементом для воспроизведения.

Я до сих пор не могу найти, как реализовать какое-либо из этих решений, и я не нашел связанной документации, поэтому я отправил свое приложение с предупреждающим сообщением, чтобы пользователи не могли использовать это приложение, если они используют совпадение с itunes.


person Mariano Latorre    schedule 20.12.2011    source источник


Ответы (2)


В iOS 6 и выше вы можете использовать [[item valueForProperty:MPMediaItemPropertyIsCloudItem] boolValue], чтобы проверить, загружен ли элемент уже.

person voidStern    schedule 06.12.2012
comment
MPMediaItemPropertyIsCloudItem не проверяет, что он уже загружен. Он просто проверяет, является ли это элементом iCloud. - person miho; 25.12.2012
comment
Фактически, как только элемент загружается, это локальный элемент, а не элемент iCloud. Так что да, [item valueForProperty:MPMediaItemPropertyIsCloudItem] возвращает только YES, если элемент не загружен. - person voidStern; 26.12.2012
comment
Эмм, вы можете использовать вместо этого: [[item valueForProperty: MPMediaItemPropertyIsCloudItem] boolValue] в противном случае, я думаю, [item valueForProperty: MPMediaItemPropertyIsCloudItem] возвращает только логическое значение, обернутое NSNumber, которое в этом случае, если вы выберете значение if ([ MPMediaItemPropertyIsCloudItem]) он всегда будет говорить ДА, даже если песня находится на устройстве: D - person Zhang; 10.09.2014

A. Найдите способ проверить, загружена ли уже песня и доступна ли она в библиотеке для воспроизведения с помощью AVPlayer. Если песня недоступна, сообщите пользователю, что мы не поддерживаем недоступные песни.

Это не идеально, но в большинстве случаев работает. Песни, загруженные из iTunes Match, не будут защищены DRM. Таким образом, вы можете проверить флаги DRM ресурсов, если он не экспортируется, его необходимо загрузить. При воспроизведении аудиокниг / капсул можно получить ложное срабатывание, но в большинстве случаев вы в безопасности.

MPMediaItem* item
NSURL* url = [item valueForProperty:MPMediaItemPropertyAssetURL];
AVURLAsset* assetToLoad = [[AVURLAsset alloc] initWithURL:url options:nil];
bool protectedCon = assetToLoad.hasProtectedContent;
bool exportable = true;

if (gApp.mSysVersionInt >= 5) {
    exportable = assetToLoad.exportable;    //4.3+
}

Б. Найдите способ запустить загрузку песни непосредственно перед тем, как она станет следующим элементом для воспроизведения.

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

person TurqMage    schedule 13.02.2012
comment
Я надеюсь, что Apple скоро выпустит документацию и стандартные методы API для обработки этих функций ... - person Mariano Latorre; 16.02.2012
comment
Это не делает различий между iTunes Match, которого нет на устройстве, и треками с DRMed, которые находятся на устройстве. У обоих будет нулевой URL-адрес ресурса ... - person awolf; 29.06.2012
comment
Верно, но как только вы узнаете, что у них есть iTunes Match, вы поймете, что это не DRMed. У меня нет точного способа узнать, что у них есть iTunes Match. - person TurqMage; 30.06.2012