1

iOS5 ユーザーの音楽ライブラリ内のトラックを表す特定の MPMediaItem について、トラックが次のいずれかであるかどうかを判断するにはどうすればよいですか。

  • iCloud からダウンロードされていない iTunes Match トラック

対。

  • DRMされたトラック

?

どちらの場合も、MPMediaItemPropertyAssetURL によって返される NSURL は nil です。したがって、AVAsset をインスタンス化してエクスポート可能フラグをチェックすることは、実行可能な解決策ではありません。

4

1 に答える 1

1

使用しているiOSのバージョンによって異なると思います。4.3より前は、アセットが返さnilれるということは、単にアイテムがDRMされており、アクセスできなかったことを意味していると思います。ただし、現在のバージョン(5)では、nilはiCloudのみであることを意味します。たぶん、DRMされただけだと思う​​トラックがありますが、実際にはiCloudに保存されている曲です。私が取り組んでいる現在のアプリでは、元々iCloudトラックをまったく考慮していなかったため(以前のバージョンのiOSのアプリをターゲットにしていたため)、使用したデバイスによってはクラッシュが発生していました。問題を解決し、iCloud / DRMをテストするには、次のものを使用します。

AVURLAsset* asset;
NSURL* realAssetUrl = [item valueForProperty:MPMediaItemPropertyAssetURL];
if(!realAssetUrl){
    //track is iCloud
}

asset = [[AVURLAsset alloc]initWithURL:realAssetUrl options:nil];
if(asset == nil || asset.hasProtectedContent){
    //asset is DRMed such that it cannot be played back.
            //most apps can stop here but I need to be able to export the song

}
if (!asset.exportable || !asset.readable){
    //the asset cannot be exported and thus cannot be cached to a file
            //the current app directory and cannot be transferred over network
            //if asset passed earlier check, can still be used for local playback
}
[asset release];

それは私にとってはうまくいくようですが、あなたはすでに同じ道を進んでいることを意味しているので、それがあなたにどれほどの助けになるかはわかりません。しかし、あなたのプロジェクトで頑張ってください。あなたが探している答えが見つかることを願っています!

于 2012-08-16T16:33:23.803 に答える