如何获得MPMediaItem(有声读物)个别章节

我知道我可以从iPod库中获得所有的有声读物:

MPMediaPropertyPredicate *abPredicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInt:MPMediaTypeAudioBook] forProperty:MPMediaItemPropertyMediaType]; MPMediaQuery *abQuery = [[MPMediaQuery alloc] init]; [abQuery addFilterPredicate:abPredicate]; [abQuery setGroupingType:MPMediaGroupingAlbum]; NSArray *books = [abQuery collections]; 

我可以通过使用这个获得每本书的部分/文件:

  [book items]; 

我无法弄清楚如何获得构成每个部分的单独章节。

我知道你可以在iPod应用程序中看到这一点,通过点击右上angular的“轨道”button,同时玩一本书。 这会翻转玩家并显示章节列表。

是苹果使用私人API来得到这个?

要获得单个章节,您需要从MPMediaItem的AssetURL属性创build一个AVAsset

 NSURL *assetURL = [mediaItem valueForProperty:MPMediaItemPropertyAssetURL]; AVURLAsset *asset = [AVURLAsset URLAssetWithURL:assetURL options:nil]; NSArray *locales = [asset availableChapterLocales]; NSArray *chapters = [asset chapterMetadataGroupsWithTitleLocale:locale containingItemsWithCommonKeys:[NSArray arrayWithObject:AVMetadataCommonKeyArtwork]]; 

获取URL并创build资产,检查该章节的可用区域设置,并从资产中获取章节。 结果是一个AVTimedMetadataGroup数组,每个数组包含一个CMTimeRange和一个AVMetadataItem数组。 每个AVMetadataItem包含一段元数据(例如章节标题,章节graphics)。

根据文档唯一支持的关键是AVMetadataCommonKeyArtwork