【问题标题】:mp3 audio playback not working with Cordova 3.5 on iOSmp3 音频播放不适用于 iOS 上的 Cordova 3.5
【发布时间】:2014-06-13 12:30:01
【问题描述】:

最近我将我们的 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 App Documents 目录中的音频播放而损坏???

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

克里斯 又名黄鼠狼

2014 年 6 月 20 日更新:已修复。我现在可以让我下载的 .mp3 文件在 iOS Cordova 3.5 上播放...显然,对于新的 Cordova 3.5 文件系统,entry.fullPath 方法不再有效,并且根据 https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md

被 entry.toURL() 替换

这在使用 Cordova 调用图像时可以正常工作,但是很长一段时间以来,iOS 上的媒体插件一直存在一个怪癖:对于声音播放,它不接受以 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 及更高版本的单一可靠解决方案..

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

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

黄鼠狼

【问题讨论】:

  • 你是否尝试过一些相对路径,例如:
  • 感谢 Watchsche 的即时回复。我只是在编辑问题并看到了您的帖子...不幸的是,我是 ObjC 的新手,并且依赖于 Cordova/Phonegap API...正如在编辑的答案中提到的,我确实尝试过相对寻址 - 一些旧版本的 Cordova 提到相对地址...但没有乐趣...
  • 谢谢。很多小事情发生了变化(有时只是为了它)而且它们从未被记录在案。这是我最讨厌 Cordova/Phonegap 的地方

标签: ios audio cordova


【解决方案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

【讨论】:

  • 谢谢你的回答西蒙 - 非常感谢你的指导。我正要更多地使用相对路径,然后幸运的是我找到了修复 - 请参阅我更新的上述问题 - 我知道您需要将此信息传递给 iOS 上的 Cordova Devs,因为它解决了如何通过新的 Cordova 3.5 文件系统插件更改在 iOS 上使用媒体插件播放音频..
  • 关于这个stackoverflow.com/questions/27455884/…的任何想法
【解决方案2】:

最新的cordova 3.5版本对我有用的是: http://www.raymondcamden.com/2014/06/23/Cordova-Media-API-Example

确保安装此插件: 科尔多瓦插件添加https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git

【讨论】:

    【解决方案3】:

    前缀 documents 结束了我的工作,可将我带到应用程序内的永久存储位置。在 iOS 插件的源代码中,您似乎可以使用这些前缀:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 2014-11-05
      • 1970-01-01
      • 2023-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多