2012-02-29 68 views
2

(注:這裏的代碼的MonoTouch/C#,但是Objective-C的答案是歡迎!)本地文件使用AVAudioPlayer播放,但不使用AVPlayer?

進出口使用AVPlayer作爲我的應用程序播放的iPod庫文件以及本地MP3/M4A文件。 iPod庫文件的播放效果很好,但我似乎無法讓AVPlayer播放本地mp3文件。

例如,此代碼的工作:

NSUrl url; 
AVAudioPlayer player2; 

url = NSUrl.FromFilename(Path.Combine(Constants.TrackCacheLocation , songPath)); 

/* The url variable has the value file://localhost/private/var/mobile/Applications/B1ED2576-4398-43F3-8573-2FA3A0342265/Documents/Cache/Remote/dcaad4ff-452e-4d91-8788-c018e6b286f2.mp3 */ 

player2 = AVAudioPlayer.FromUrl(url); 
player2.Play(); 

以上優良工程,請注意,這是使用AVAudioPlayer

這不(使用AVPlayer):

NSUrl url; 
AVPlayer player2; 

url = NSUrl.FromFilename(Path.Combine(Constants.TrackCacheLocation , songPath)); 

/* The url variable has the value file://localhost/private/var/mobile/Applications/B1ED2576-4398-43F3-8573-2FA3A0342265/Documents/Cache/Remote/dcaad4ff-452e-4d91-8788-c018e6b286f2.mp3 */ 

player2 = AVPlayer.FromUrl(url); 
player2.Play(); 

從本地或遠程Web服務器創建NSURL也可以(與AVPlayer),例如:http://10.0.0.1/testing/test.mp3延遲約一兩秒鐘,同時加載,然後開始罰款。我有一種感覺即時沒有正確創建我的NSUrl(即使它對AVAudioPlayer工作正常)。任何人有什麼想法可能會出錯?

另外,如果我檢查AVPlayer的CurrentItem.Status它仍然是未知的,它永遠不會變爲ReadyToPlay

+0

您是否撥打了「PrepareToPlay()」? – 2012-02-29 15:23:17

+0

AVPlayer上只有AVAudioPlayer沒有PrepareToPlay()(從Apple的文檔中可以看到)。 – Dermot 2012-03-01 07:12:48

回答

0

使用NSUrlNSUrlRequest參數異步設計,將有問題的許多API(or even crash)如果定義爲局部變量(例如,當您的方法返回時,本地代碼仍然需要時將收集該變量)。

上面的代碼不提供有關它們創建位置的足夠信息。如果您使用本地變量,則嘗試將它們提升爲字段並確保它們將存在(例如,不要重新分配它們),直到您不再需要AVPlayer

+0

avplayer是在課堂上創建的。作爲一款音樂播放應用程序,課程永遠保持在範圍內。 nsurl正在該方法中聲明。請注意,avplayer工作正常,沒有問題的iTunes庫文件和遠程URL,它只是本地文件系統文件拒絕播放 – Dermot 2012-02-29 14:40:02

+0

它可能是無關的,但*請嘗試*由於本地和遠程訪問的URL將使用不同的代碼路徑,並會有不同的行爲(只有測試它,很容易,可以肯定地告訴你)。 – poupou 2012-02-29 14:49:03

+0

剛剛測試過這將所有變量作爲類級變量,仍然沒有運氣讓它工作。該軌道絕對有效,因爲它與AVAudioPlayer(建議網址也是有效的)一起播放,並通過Xcode導出並在iTunes中播放。 – Dermot 2012-03-01 07:14:22

相關問題