我正在开发一个应用程序,使AVPlayer,MPMediaItem和MPMediaQuery的使用。只要Itunes匹配,它就能正常工作。我们从一个MPMediaQuery开始,然后我们执行一些过滤,留下一些MPMediaItems,然后我们一直使用AVPlayer,因为: 1.-我们在歌曲播放期间也播放噪音2。-我们需要暂停播放/停止来自ipod的事件。
所有这些功能目前都在运行,除非ipod库启用了itunes match。即使AVPlayer状态为正在播放,也不会发出声音。很明显,它不会触发从iCloud下载歌曲。
到目前为止,我所有关于itunes match的信息都是这篇文章:MPMediaItem and iTunes Match
声明您可以通过使用MPMusicPlayerController play调用来触发下载。由于上述原因,我们不能使用这个类来控制我们自己的玩家。
关于如何解决这个问题,我有两个想法: A.找到一种方法来检查一首歌是否已经下载并在库中可用来使用AVPlayer播放。如果歌曲不可用,让用户知道我们不支持歌曲不可用。B.在歌曲成为下一个要播放的项目之前,找到一种触发歌曲下载的方法。
我仍然找不到如何实现这些解决方案,我也没有找到任何相关的文档,所以我提交了我的应用程序和警告消息,以防止用户使用该应用程序,如果他们正在使用itunes match。
发布于 2012-12-06 16:53:26
在iOS 6和更高版本上,你可以使用[[item valueForProperty:MPMediaItemPropertyIsCloudItem] boolValue]来检查某个项目是否已经下载。
发布于 2012-02-14 02:00:56
A.找到一种方法来检查一首歌曲是否已经下载并且可以使用AVPlayer在库中播放。如果歌曲不可用,让用户知道我们不支持歌曲不可用。
这并不完美,但它在大多数情况下都是有效的。从iTunes Match下载的歌曲将是免费的。因此,您可以检查资产DRM标志,如果它不能导出,则需要下载。有声书/播客可能会出现假阳性,但你基本上是安全的。
MPMediaItem* item
NSURL* url = [item valueForProperty:MPMediaItemPropertyAssetURL];
AVURLAsset* assetToLoad = [[AVURLAsset alloc] initWithURL:url options:nil];
bool protectedCon = assetToLoad.hasProtectedContent;
bool exportable = true;
if (gApp.mSysVersionInt >= 5) {
exportable = assetToLoad.exportable; //4.3+
}B.找到一种方法,在歌曲成为下一个要播放的项目之前触发歌曲的下载。
你可以尝试在静音的MPMusicPlayerController中这样做,但没有办法跟踪歌曲何时下载,有时需要很长时间。
https://stackoverflow.com/questions/8575170
复制相似问题