Cordova 3.5在iOS上无法播放MP3音频。

10

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

以前下载到iOS标准文档文件夹中的mp3文件,无法使用Media API /插件进行播放。这段代码在包括Cordova 3.3在内的许多iOS版本上一直可靠地工作... mp3文件已经下载到“documents”文件夹的一个名为“Downloads”的子目录中。

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

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

在我的代码中(在一些用于File Plugin API的代码块之后),我使用以下方法获取目录:downloadDirFullPath = window.appRootDir.toURL();

为了符合3.5文件API的新更改,我最近将其从downloadDirFullPath = window.appRootDir.fullPath;更改为此方式。

对于Cordova 3.5的Media Plugin API,来自iOS App Documents目录的音频播放是否出现问题???

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

Chris 也就是 weeasle

更新于2024年6月20日: 发现解决方案。我现在可以在iOS Cordova 3.5上播放已下载的.mp3文件......显然,使用新的Cordova 3.5文件系统时,entry.fullPath方法不再起作用,取而代之的是entry.toURL(),参见https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md

当调用Cordova的图像时,这样做很好。但是,在iOS上已经有一段时间了Media Plugin出现了问题:对于声音播放,它不接受以file:///开头的URL,而只接受绝对路径,如/var/mobile/Applications/{GUID}/Documents/

答案和解决方案是在从fileSystem.root.getDirectory返回的入口中使用新的toInternalURL()方法。 我使用的确切调用是downloadDirFullPath = window.appRootDir.toInternalURL(); (从fileSystem.root.getDirectory传递的条目调用)。 这将返回:cdvfile://localhost/persistent/Downloads/,将其前缀添加到.mp3或其他音频文件中可在iOS上成功播放。 这对于显示图像和媒体也有效,因此它是Cordova iOS 3.5及以上版本的单一可靠解决方案。 这绝对是首选解决方案,因为它比使用相对路径更安全(如果未来苹果在iOS发布中进行重大文件结构更改,则文件访问可能会中断)...... 另外需要注意的一点是,除了上述调用/方法外,downloadDirName = window.appRootDir.name;还设置了cdvfile://localhost/persistent/基本路径

你尝试过使用相对路径吗?例如:<NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docDir = [paths objectAtIndex: 0];> - Watsche
感谢Watsche的及时回复。我正在编辑问题并看到了你的帖子...不幸的是,我对ObjC完全是个新手,依赖于Cordova/Phonegap API...正如在编辑后的答案中提到的,我确实尝试过相对寻址-一些旧版本的Cordova提到了相对地址...但没有成功... - chris
谢谢。很多小事情都会改变(有时只是为了改变),而且它们从来没有被记录下来。这就是我最讨厌 Cordova/Phonegap 的事情。 - Paranoid Android
3个回答

1

我最近没有在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

谢谢你的回答Simon - 非常感谢你的指导。我正要更多地尝试相对路径,然后幸运地找到了解决方法 - 请参见我已更新的上面的问题 - 我知道你会想把这个信息传递给Cordova Devs在iOS上,因为它解决了如何使用新的Cordova 3.5文件系统插件更改在iOS上使用媒体插件播放音频的问题。 - chris
你对这个问题有什么想法吗?http://stackoverflow.com/questions/27455884/file-copyto-not-working-in-cordova - Aravin

1

0

documents前缀对我来说已经无法将我带到应用程序中的持久存储位置。在iOS插件的源代码中,看起来可以使用以下这些前缀:

"documents://"
"http://"
"https://"
"cdvfile://"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接