URL to MPMediaItem



我有一个简单的问题,但我找不到正确的答案。我有一个歌曲的网址保存到我的数据库在这样的路径。

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

如何转换回一个MPMediaItem对象,其中有歌曲名称艺术家和艺术品?

有可能吗?

保存:

    NSNumber* persistentID = 
[mediaItem valueForProperty:MPMediaItemPropertyPersistentID];

装载:

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

另一个例子:MPMediaItemPropertyPersistentID的NSNumber到NSString并再次返回

请注意,歌曲url是不可靠的,因为任何DRM歌曲都会返回空url

或者,一个对我有用的恶意黑客(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意味着"如果这是一个媒体ID,就这样做,否则,就用URL那样做"。

相关内容

  • 没有找到相关文章

最新更新