从iPodLibrary获取播客元数据

贝娄是在iOS设备的iPod库中获取项目的代码,我遇到的问题是获取正确的MPMediaItemProperty 。 我理解的方式,如果我想获得像艺术品,评论标题的数据 – 我必须采取MPMediaItemCollection类的媒体项目在我的- (MPMediaItem *)mediaItemForRow: (NSInteger)row方法。

这个问题是,我没有得到苹果公司的相同信息 – 因为我已经检查了他们的播客应用程序。 他们必须使用其他方式获取数据,因为我只收到来自每个单独的播客插曲的评论。 而且我也只能得到某些播客的艺术作品。 而在播客应用程序,他们都有艺术品。

所以我一定在这里做错了什么?

 @interface testclassViewController () @property (nonatomic, strong) NSArray *audiobooks; @end @implementation testclassViewController - (void)viewDidLoad { [super viewDidLoad]; MPMediaItem *mediaItem = [self mediaItemForRow:0]; self.testText.text = [mediaItem valueForProperty:MPMediaItemPropertyComments]; MPMediaItemArtwork *img = [mediaItem valueForProperty:MPMediaItemPropertyArtwork]; UIImage *artworkUIImage = [img imageWithSize:CGSizeMake (128, 128)]; self.testImage.image = artworkUIImage; } #pragma mark - query settings - (MPMediaPropertyPredicate *)mediaTypeToFetchFromiPodLibrary { MPMediaPropertyPredicate *abPredicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypePodcast] forProperty:MPMediaItemPropertyMediaType]; return abPredicate; } - (MPMediaQuery *)setMediaQueryOptions: (MPMediaQuery*)abQuery withPredicate: (MPMediaPropertyPredicate*) abPredicate { [abQuery addFilterPredicate:abPredicate]; //[abQuery setGroupingType:MPMediaGroupingAlbum]; [abQuery setGroupingType:MPMediaGroupingPodcastTitle]; return abQuery; } #pragma mark - - (MPMediaItem *)mediaItemForRow: (NSInteger)row { NSArray *audiobooks = self.audiobooks; MPMediaItem *mediaItem = nil; id object = audiobooks[row]; if ([object isKindOfClass:[MPMediaItemCollection class]]) { MPMediaItemCollection *book = (MPMediaItemCollection *)object; id item = [book items][0]; if ([item isKindOfClass:[MPMediaItem class]]) { mediaItem = (MPMediaItem *)item; } } return mediaItem; } /* Get´s the sub items for Podcasts title */ - (NSArray *)subMediaItemsForPodcastTitle: (NSString *)podcastTitle { NSMutableArray *subMediaItemsToReturn = [NSMutableArray array]; for (id collections in self.audiobooks) { if ([collections isKindOfClass:[MPMediaItemCollection class]]) { MPMediaItemCollection *collection = (MPMediaItemCollection *)collections; for (id mediaItems in collection.items) { MPMediaItem *mediaitem = (MPMediaItem *)mediaItems; NSString *mediaItemTitle = [mediaitem valueForProperty:MPMediaItemPropertyPodcastTitle]; if ([mediaItemTitle isEqual:podcastTitle]) { //NSLog(@"found mediaItem belonging to title: %@",mediaItemTitle); [subMediaItemsToReturn addObject:mediaitem]; } } } } return subMediaItemsToReturn; } // property getter - (NSArray *)audiobooks { MPMediaPropertyPredicate *abPredicate = [self mediaTypeToFetchFromiPodLibrary]; MPMediaQuery *abQuery = [[MPMediaQuery alloc] init]; abQuery = [self setMediaQueryOptions:abQuery withPredicate:abPredicate]; // Abstract NSArray *books = [abQuery collections]; return books; } @end 

如果用户使用播客应用程序下载播客节目,则很多元数据将丢失(评论等)。 如果用户通过使用iTunes同步获取设备上的播客,则大部分数据都在那里。 我打算提交一个错误,但没有。 获取可能不会使用MPMediaPlayer框架显示的数据的一种方法是使用AVFoundation直接获取id3标签数据。

 #import <AVFoundation/AVFoundation.h> #import <MediaPlayer/MediaPlayer.h> MPMediaItem *item; AVURLAsset *itemAsset = [item valueForProperty:MPMediaItemPropertyAssetURL]; NSArray *mDatsForFormats = [itemAsset metadataForFormat:@"org.id3"]; for (AVMetadataItem *mDatItem in mDatsForFormats){ if (mDatItem.stringValue) { NSLog(@"\nkey %@\nvalue %@",mDatItem.key,mDatItem.stringValue); } NSLog(@"%@",mDatItem); }