MPMediaItem和iTunes Match

Tur*_*age 29 ipod objective-c core-audio ios icloud

我有一个使用iPod Library API访问iOS中歌曲数据库的应用程序.随着iTunes Match的发布,任何不在设备上的歌曲都将无法加载.有没有办法要求下载这首歌?也许使用新的iCloud API?

编辑: 要明确我不会问如何使用iPhone下载iTunes Match歌曲.iOS SDK允许通过MPMediaQuery/MPMediaItems访问iPod库.在具有iTunes Match功能的iOS设备上,通过MPMediaQuery返回iTunes匹配库中但不在设备本地的歌曲,但MPMediaItems的'exportable'标志设置为false.当我在音乐应用程序中访问这些歌曲时,它们会自动下载.我想通过MPMediaItem触发相同的自动下载.

我已经看到iTunes Match中的项目被视为iCloud的一部分,并且iOS 5 SDK中有一个新的iCloud部分.但据我了解,我只能上传我的应用程序数据.我希望通过MPMediaItem或通过iCloud使用URL来触发iTunes Match下载.

Tur*_*age 15

我找到了一些东西,但它并不好.如果您选择要通过iPod播放器播放的歌曲,则会触发下载.您可以使用MPMusicPlayerController访问iPod播放器.

MPMusicPlayerController *mDRMAudioPlayer;
mDRMAudioPlayer = [MPMusicPlayerController iPodMusicPlayer];

MPMediaQuery *assetQuery = [[MPMediaQuery alloc] init];
NSNumber *persistentID = [mediaItem valueForProperty: MPMediaItemPropertyPersistentID];
MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue: persistentID 
                                                                       forProperty: MPMediaItemPropertyPersistentID];
[assetQuery addFilterPredicate: predicate];

[mDRMAudioPlayer setQueueWithQuery: assetQuery];
[mDRMAudioPlayer play];
Run Code Online (Sandbox Code Playgroud)

没有关于这是否真的开始下载的反馈,或下载的进展但项目将开始下载,如果您的连接良好,它将在第一次播放(否则您可以垃圾邮件播放,它将开始启动).


小智 7

我刚刚从Apple那里听到了关于这个问题的回复(我使用了一个技术支持事件).

根据Apple的说法,iOS SDK目前不提供用于启动iCloud下载的任何API.我被指示通过Apple的bug报告工具提交此功能的增强请求.我会鼓励其他人也这样做.

考虑到iCloud是iOS 5的定义功能之一,Apple真的应该为从iCloud下载音频资产提供程序化支持.

  • 我还针对它发布了一个错误报告(#12736293),其描述如下:`iOS SDK中没有API可以确定本地轨道与iCloud上(iTunes Match中)是否相对可用。任何跟踪其下载状态的API。无法区分本地可用曲目和仅可通过iCloud播放的曲目,并且,如果您开始播放需要下载的媒体项目,则无法监视下载进度(开始,失败, -进度,完成)` (2认同)

Bre*_*nan 7

MPMediaItem | iCloud或DRM受保护

上面的链接显示了如何使用iOS 6中引入的属性来查看MPMediaItem是否在云中.

MPMediaItemPropertyIsCloudItem

BOOL isCloud = FALSE;

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
    NSNumber *isCloudNumber = [mediaItem valueForProperty:MPMediaItemPropertyIsCloudItem];
    isCloud = [isCloudNumber boolValue];
}
if (isCloud) {
    DebugLog(@"Cloud Asset URL: %@", assetURL);
}
Run Code Online (Sandbox Code Playgroud)

这是使用宏来确保只有iOS 6使用iOS 6中添加的代码.下面是该宏.

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
Run Code Online (Sandbox Code Playgroud)

据我所知,你仍然无法启动下载.