2012-02-29 65 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

相关问题