【问题标题】:MPMediaItemPropertyAssetURL returning nilMPMediaItemPropertyAssetURL 返回 nil
【发布时间】:2016-06-28 08:05:48
【问题描述】:

我正在做一个项目,我需要从AVPlayer 的 iTunes 库中播放歌曲。为此,我从 iTunes 库中获取 URL "ipod-library://item/item.mp3?id=1577682869916034242" 并在 AVPlayer 中播放相同的歌曲。几乎所有歌曲都能播放,但对于少数歌曲 MPMediaItemPropertyAssetURL 返回 nil URL。还收到以下错误

-[AVAssetReader initWithAsset:error:] 无效参数不满足:asset != ((void *)0)

对此有何建议?以及为什么我从

得到零值

MPMediaItemPropertyAssetURL

还知道如何将受 DRM 保护的媒体轨道流式传输或转换为 NSData?。 请指教。

【问题讨论】:

  • 你可以参考这个stackoverflow.com/questions/5571036/…。我认为您应该检查从 MPMediaItemPropertyAssetURL NSURL *assetURL = [item valueForProperty:MPMediaItemPropertyAssetURL]; if (assetURL && assetURL.aboluteString.length > 0) ... 获取的网址
  • @DungProton 我可以检查一下。但我想知道原因,为什么它是零。如果我想播放那首歌怎么办?
  • stackoverflow.com/questions/21195064/… ?是因为它在云端吗?
  • 它是受 DRM 保护的媒体轨道(数字版权管理)?您可以通过avItem.asset.hasProtectedContent查看它
  • [mediaPicker setShowsCloudItems:NO];试试这个

标签: ios iphone avplayer mpmediaitem


【解决方案1】:

MPMediaItemPropertyAssetURL 可能出于两个可能的原因返回 null。

  1. 音乐并未下载到您的设备,而是添加到音乐中 仅限图书馆。
  2. 音乐已加载,但受 DRM 保护。

受 DRM 保护的资产无法使用 AVPlayer 播放,它只能使用 MPMusicPlayer 播放。因此,在继续使用 AVPlayer 之前,您必须检查两件事。

  1. MPMediaItemPropertyAssetURL 为零?
  2. MPMediaItem 受保护?

请看下面的代码……

MPMediaItem *theChosenSong = [[mediaItemCollection items] firstObject];
NSURL *assetURL = [theChosenSong valueForProperty:MPMediaItemPropertyAssetURL];
    if(assetURL) {
        BOOL bIsProtected = theChosenSong.protectedAsset;
        if(!bIsProtected) {
            // Do whatever you want to do
            NSLog(@"Its not protected");
       }
        else {
            NSLog(@"Its DRM protected");
        }
    }
    else {
            NSLog(@"DRM protected or not downloaded locally");
    }

【讨论】:

    【解决方案2】:

    我发现问题在于我试图获取 MPMediaItemPropertyAssetURL 属性的歌曲实际上不在我的设备上。它列在媒体库中,但实际上仍在 iCloud 中。将歌曲下载到设备后,问题就解决了。

    【讨论】:

      【解决方案3】:

      将此答案留给像我这样的其他人。

      即使音乐已下载到设备上,但如果受 DRM 保护,MPMediaItem.value(forProperty: MPMediaItemPropertyAssetURL) 将返回 nil,如评论中所述。

      我的应用不断崩溃,我通过我的 Beta 版测试人员确认了这一点。

      好像MPMusicPlayerController 还支持播放所以根据this answer.

      【讨论】:

        猜你喜欢
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        • 2019-06-20
        • 2017-12-16
        • 2014-09-27
        • 2017-06-11
        相关资源
        最近更新 更多