(注意:这里的代码是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
答案 0 :(得分:0)
许多使用NSUrl
或NSUrlRequest
参数的API都是异步设计,如果定义为局部变量,则会出现问题(or even crash)(例如将在本机代码仍然需要时返回方法时收集)。
上面的代码无法提供有关创建位置的足够信息。如果你正在使用局部变量,那么尝试将它们作为字段进行推广,并确保它们存在(例如,不要重新分配它们),直到你不再需要AVPlayer
为止。