【问题标题】:iTunes Match + AVplayer + MPMediaQuery not workingiTunes Match + AVplayer + MPMediaQuery 不工作
【发布时间】:2012-01-24 09:36:15
【问题描述】:

我正在开发一个使用 AVPlayer、MPMediaItem 和 MPMediaQuery 的应用程序。只要iTunes匹配,它就可以工作。我们从 MPMediaQuery 开始,然后我们执行一些过滤,留下一些 MPMediaItems,然后我们一直在使用 AVPlayer,因为: 1.-我们在歌曲播放过程中也会播放噪音 2.- 我们需要从 ipod 订阅播放/停止事件。

所有这些功能目前都在工作,除非 ipod 库启用了 iTunes 匹配。即使在播放 AVPlayer 状态时,也没有声音。很明显,它没有触发从 iCloud 下载歌曲。

我目前掌握的有关 iTunes 匹配的所有信息都是这篇文章: MPMediaItem and iTunes Match

这表明您可以使用 MPMusicPlayerController 播放调用来触发下载。由于上面给出的原因,我们不能使用这个类来控制我们自己的播放器。

我对如何解决这个问题有两个想法: A. 找到一种方法来检查一首歌曲是否已经下载并在库中可用以使用 AVPlayer 播放。如果歌曲不可用,请告知用户我们不支持不可用的歌曲。 B. 想办法在歌曲成为下一个要播放的项目之前触发下载歌曲。

我仍然找不到如何实施这些解决方案,也没有找到任何相关文档,因此我提交了我的应用程序,并附上一条警告消息,以防止用户在使用 itunes match 时使用此应用程序。

【问题讨论】:

    标签: itunes match avplayer mpmediaitem mpmediaitemcollection


    【解决方案1】:

    在 iOS 6 及更高版本上,您可以使用 [[item valueForProperty:MPMediaItemPropertyIsCloudItem] boolValue] 检查项目是否已下载。

    【讨论】:

    • MPMediaItemPropertyIsCloudItem 不会验证它是否已下载。它只是检查它是否是 iCloud 项目。
    • 实际上,一旦下载项目,它就是本地项目,而不是 iCloud 项目。所以是的,[item valueForProperty:MPMediaItemPropertyIsCloudItem] 仅在项目未下载时返回 YES
    • Erm,你可能想改用这个: [[item valueForProperty:MPMediaItemPropertyIsCloudItem] boolValue] 否则,我认为 [item valueForProperty:MPMediaItemPropertyIsCloudItem] 只返回一个 NSNumber 包装的布尔值,在这种情况下如果你去 if([item valueForProperty:MPMediaItemPropertyIsCloudItem]) 即使歌曲在设备上,它也会一直说是:D
    【解决方案2】:

    A.找到一种方法来检查一首歌曲是否已经下载并可用 在库中使用 AVPlayer 播放。如果歌曲不可用 让用户知道我们不支持不可用的歌曲。

    这并不完美,但在大多数情况下都有效。从 iTunes Match 下载的歌曲将是免费的 DRM。因此,您可以检查资产 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 执行此操作,但无法跟踪歌曲何时下载,有时需要很长时间。

    【讨论】:

    • 我希望苹果能尽快发布文档和 API 标准方法来处理这些功能......
    • 这不会区分设备上没有的 iTunes Match 和设备上的 DRMed 曲目。两者都将有一个 nil 资产 URL...
    • 没错,但是一旦您知道他们有 iTunes Match,您就会知道它不是 DRMed。我不知道他们有 iTunes Match。
    猜你喜欢
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多