3

AVPlayer、MPMediaItem、および MPMediaQuery を使用するアプリを開発しています。Itunes が一致する限り動作します。MPMediaQuery から開始し、いくつかの MPMediaItem を残してフィルタリングを実行します。次に、次の理由で AVPlayer を使用しています。1.- 曲の再生中にノイズも再生します。

iPod ライブラリで iTunes Match が有効になっている場合を除き、この機能はすべて現在動作しています。AVPlayer のステータスが再生されていても音が出ません。iCloud からの曲のダウンロードをトリガーしていないことは明らかです。

現時点で iTunes の一致について私が持っているすべての情報は、この投稿です: MPMediaItem と iTunes の一致

これは、MPMusicPlayerController の再生呼び出しを使用してダウンロードをトリガーできることを示しています。上記の理由により、このクラスを使用して独自のプレーヤーを制御することはできません。

この問題を解決するには、次の 2 つの方法があります。 A. 曲が既にダウンロードされていて、ライブラリで AVPlayer を使用して再生できるかどうかを確認する方法を見つけます。曲が利用できない場合は、利用できない曲はサポートされていないことをユーザーに知らせます。B. 次に再生する項目になる直前に、曲のダウンロードをトリガーする方法を見つけます。

これらのソリューションを実装する方法がまだ見つからず、関連するドキュメントも見つからないため、iTunes マッチを使用しているユーザーがこのアプリを使用できないように、警告メッセージを付けてアプリを送信しました。

4

2 に答える 2

3

iOS 6以降で[[item valueForProperty:MPMediaItemPropertyIsCloudItem] boolValue]は、アイテムがすでにダウンロードされているかどうかを確認するために使用できます。

于 2012-12-06T08:53:25.740 に答える
2

A.曲がすでにダウンロードされており、ライブラリでAVPlayerを使用して再生できるかどうかを確認する方法を見つけてください。曲が利用できない場合は、利用できない曲はサポートされていないことをユーザーに知らせてください。

これは完璧ではありませんが、ほとんどの場合は機能します。iTunesMatchからダウンロードした曲は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がミュートされますが、曲がいつダウンロードされたかを追跡する方法がなく、非常に長い時間がかかる場合があります。

于 2012-02-13T18:00:56.100 に答える