URL-адрес MPMediaItem

У меня простой вопрос, но я не могу найти правильный ответ. У меня есть URL-адрес песни, сохраненный в моей базе данных по такому пути.

aSound.path = [[item valueForProperty: MPMediaItemPropertyAssetURL] absoluteString];

Как преобразовать обратно в объект MPMediaItem, у которого есть имя исполнителя и обложка песни?

Является ли это возможным?


person flatronka    schedule 27.03.2012    source источник


Ответы (2)


Сохранение:

    NSNumber* persistentID = 
[mediaItem valueForProperty:MPMediaItemPropertyPersistentID];

Загрузка:

            MPMediaPropertyPredicate * predicate = 
              [MPMediaPropertyPredicate 
                predicateWithValue:persistentID 
                       forProperty:MPMediaItemPropertyPersistentID];

Другой пример: NSNumber для MPMediaItemPropertyPersistentID в NSString и обратно

Обратите внимание, что URL-адреса песен ненадежны, поскольку любая песня DRM возвращает нулевой URL-адрес.

person amleszk    schedule 27.03.2012
comment
Как передать элемент мультимедиа с хоста на сторону клиента, используя подключение множителя? - person Adeel Ishaq; 24.06.2015

В качестве альтернативы, неприятный хак, который работает для меня (tm).

- (MPMediaItem *)getMediaItemForURL:(NSURL *)url {
    // We're going to assume that the last query value in the URL is the media item's persistent ID and query off that.

    NSString *queryString = [url query];
    if (queryString == nil) // shouldn't happen
        return nil;

    NSArray *components = [queryString componentsSeparatedByString:@"="];
    if ([components count] < 2) // also shouldn't happen
        return nil;

    id trackId = [components objectAtIndex:1];

    MPMediaQuery *query = [[MPMediaQuery alloc] init];
    [query addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:trackId forProperty:MPMediaItemPropertyPersistentID]];

    NSArray *items = [query items];

    if ([items count] < 1) // still shouldn't happen
        return nil;

    return [items objectAtIndex:0];
}

Комментарии приветствуются за то, где это может пойти не так или как это улучшить. Я предпочитаю передавать URL-адрес вместо PersistentID, поскольку у меня есть несколько источников мультимедиа, каждый из которых может использовать URL-адреса. Использование PersistentID будет означать много «если это идентификатор носителя, сделайте это, иначе сделайте то с URL-адресом».

person Ian Howson    schedule 18.10.2013
comment
Он отлично работает и не требует много времени для создания mpmediaitem. Спасибо. +1 тебе. :) - person Tendulkar; 12.03.2014
comment
Это моя БОЛЬШАЯ благодарность за ваш пост здесь, чувак: ianhowson.com/blog/a-quick-guide-to-using-mysql-in-python. Это действительно помогло мне понять и заставило мою логику Python работать, так что СПАСИБО, СПАСИБО и еще раз СПАСИБО !!! Ууу - person Bitcoin Murderous Maniac; 12.04.2018