![](/img/trans.png)
[英]how to display selected songs from ipodLibrary played from avplayer in uitableview
[英]Getting podcast metadata from from iPodLibrary
Bellow是用於在iOS設備的iPod庫中獲取項目的代碼,我遇到的問題與獲取正確的MPMediaItemProperty
。 如果要獲取藝術品,注釋標題之類的數據,我的理解方式-我必須在- (MPMediaItem *)mediaItemForRow: (NSInteger)row
方法中獲取MPMediaItemCollection
類的一個媒體項。
問題是我沒有得到與蘋果公司相同的信息-因為我在他們的播客應用中簽了名。 他們必須使用其他方式來獲取數據,因為我僅從每個個人播客中獲得評論。 而且我也只獲得某些播客的插圖。 在播客應用中,它們都有藝術品。
所以我一定在這里做錯了嗎?
@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
如果用戶使用Podcasts應用程序下載Podcast劇集,則會丟失很多元數據(評論等)。 如果用戶通過使用iTunes sync在設備上獲得播客,則其中的大部分數據都在那里。 我本打算提交錯誤,但沒有。 使用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);
}
在iOS 10中,我發現播客作品僅適用於使用iOS Podcasts應用下載的劇集。 從Mac上的iTunes同步的劇集不包含播客作品。 希望這對其他人有幫助。 (由於注釋易變且不易搜索,因此添加為答案)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.