iOS 上的 Cordova 3.5 无法播放 mp3 音频

2024-04-07

最近我将我们的 iOS 项目从 Cordova 3.3 升级到 3.5。

mp3 文件(之前下载到 iOS 标准文档文件夹中)将无法使用媒体 API/插件播放。该代码已在 iOS 的许多版本上可靠地工作,包括 Cordova 3.3...mp3 文件已下载到标准 iOS 应用程序“文档”文件夹中名为“下载”的子目录中。

在 XCode 控制台中,我收到以下错误:

未知资源'file://localhost/Users/weeasle/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/{App-ID}/Documents/Downloads/testsound.mp3'

在我的代码中(在文件插件 API 的几个代码块之后)我使用以下方法获取目录: downloadDirFullPath = window.appRootDir.toURL();

为了符合 3.5 文件 API 的新变化,我最近将其从 downloadDirFullPath = window.appRootDir.fullPath;

Cordova 3.5 的媒体插件 API 是否无法从 iOS 应用程序文档目录播放音频?

或者我只是真的很累并且错过了一些明显的东西......非常感谢任何建议或信息。

克里斯 又名黄鼠狼

2014 年 6 月 20 日更新:已找到修复。我现在可以让我下载的 .mp3 在 iOS Cordova 3.5 上播放...显然,在新的 Cordova 3.5 文件系统中,entry.fullPath 方法不再起作用,而是被 entry.toURL() 取代。https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md

使用 Cordova 调用图像时效果很好,但是 iOS 上的媒体插件在相当长一段时间内有一个怪癖:对于声音播放,它不接受以 file:/// 开头的 URL,它只接受像 /var 这样的绝对路径/移动/应用程序/{GUID}/文档/

答案和解决方法是使用从 fileSystem.root.getDirectory 返回的条目中调用的新 toInternalURL() 方法。我使用的确切调用是 downloadDirFullPath = window.appRootDir.toInternalURL(); (从 fileSystem.root.getDirectory 传递的条目调用)。

这将返回: cdvfile://localhost/persistent/Downloads/ ,当前置到 .mp3 或其他音频文件时,它可以在 iOS 中成功播放。

这也适用于显示图像和媒体,因此它是 Cordova iOS 3.5 及更高版本的单一可靠解决方案。

这是迄今为止首选的解决方案,因为它比使用相对路径更安全(就好像将来 Apple 在 iOS 版本中对文件结构进行重大更改一样,文件访问可能会中断)...

进一步说明 - 除了上面的调用/方法之外, downloadDirName = window.appRootDir.name;还设置 cdvfile://localhost/persistent/ 基本路径

Weeasle


我最近没有在 iOS 上玩过媒体,但如果我查看文档,它会指出:

var myMedia = new Media("audio/beer.mp3")
myMedia.play()  
// first looks for file in www/audio/beer.mp3 then in 
<application>/documents/tmp/audio/beer.mp3

所以,如果我是你,我会尝试以下相对路径:

"../Downloads/testsound.mp3"

应该改变:

<application>/documents/tmp/../Downloads/testsound.mp3

只是:

<application>/documents/Downloads/testsound.mp3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 上的 Cordova 3.5 无法播放 mp3 音频 的相关文章

随机推荐