本地文件与AVAudioPlayer一起播放但不与AVPlayer播放?

时间:2012-02-29 07:58:52

标签: objective-c ios xamarin.ios avplayer

(注意:这里的代码是Monotouch / C#,但欢迎Objective-C答案!)

我使用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

1 个答案:

答案 0 :(得分:0)

许多使用NSUrlNSUrlRequest参数的API都是异步设计,如果定义为局部变量,则会出现问题(or even crash)(例如将在本机代码仍然需要时返回方法时收集)。

上面的代码无法提供有关创建位置的足够信息。如果你正在使用局部变量,那么尝试将它们作为字段进行推广,并确保它们存在(例如,不要重新分配它们),直到你不再需要AVPlayer为止。