2011-12-20 57 views
3

我正在開發一個使用AVPlayer,MPMediaItem和MPMediaQuery的應用程序。只要Itunes匹配,它就會工作。我們從MPMediaQuery開始,然後我們執行一些過濾,留下一些MPMediaItems,然後我們一直在使用AVPlayer,因爲: 1.-我們也在播放歌曲時播放噪音 2.-我們需要訂閱播放/停止來自iPod的事件。iTunes Match + AVplayer + MPMediaQuery不起作用

所有這些功能目前正在工作,除非ipod庫已啓用iTunes匹配。即使播放AVPlayer狀態,也不會有聲音。很明顯,它不會觸發從iCloud下載歌曲。

所有我對因一時的iTunes匹配的信息是這個帖子: MPMediaItem and iTunes Match

其中規定,你可以通過使用MPMusicPlayerController打打電話觸發下載。由於上述原因,我們不能利用這個班級來控制我們自己的球員。

我對如何解決這個問題有兩個想法: A.找一種方法來檢查一首歌是否已經下載並且可以在庫中用AVPlayer播放。如果歌曲不可用,請讓用戶知道我們不支持歌曲不可用。 B.找到一種方法在它成爲下一個播放項目之前觸發歌曲的下載。

我仍無法找到如何實現這些解決方案,我還沒有找到任何相關文件,所以我提出我的應用程序的警告信息,以防止用戶,如果他們使用的是iTunes的匹配使用此應用。

回答

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,但沒有辦法跟蹤歌曲下載時,有時需要很長時間。

+0

我希望蘋果很快發佈文檔和API標準方法來處理此功能... – 2012-02-16 11:05:37

+0

感謝您的幫助:) – 2012-02-16 11:05:49

+0

這不區分設備上沒有的iTunes Match和DRMed軌道上設備。兩者都會有一個零資產網址... – awolf 2012-06-28 20:06:28

3

在iOS 6及更高版本中,您可以使用[[item valueForProperty:MPMediaItemPropertyIsCloudItem] boolValue]檢查是否已經下載了一個項目。

+0

MPMediaItemPropertyIsCloudItem不驗證它已被下載。它只是檢查它是否是一個iCloud項目。 – miho 2012-12-25 09:45:09

+5

事實上,一旦一個項目被下載這是一個本地的項目,而不是iCloud的項目。所以是的,'[item valueForProperty:MPMediaItemPropertyIsCloudItem]'只返回'YES',如果該項目沒有下載。 – voidStern 2012-12-26 10:33:40

+2

呃,你可能想用這個來代替:[[項目valueForProperty:MPMediaItemPropertyIsCloudItem] boolValue否則,我認爲[項目valueForProperty:MPMediaItemPropertyIsCloudItem]只返回一個NSNumber包裹布爾值,在這種情況下,如果你去,如果([項目valueForProperty :MPMediaItemPropertyIsCloudItem]),它會說YES,即使首歌是設備上的所有時間:d – Zhang 2014-09-10 04:52:32

相關問題