如何使用html5音频标签在Android上使用phonegap播放本地mp3?

时间:2014-02-03 10:30:48

标签: android html5 cordova html5-audio

我在Android 4.4上使用phonegap上的Android SDK v19进行部署。我在我的index.html文件所在的文件夹中有一个mp3文件,我想用html5音频标签播放。

<html>
  <body>
  <audio controls>
    <source src='sound.mp3' type='audio/mpeg'>
  </audio>
  </body>
  <script type="text/javascript" src="cordova.js"></script>
</html>

它不起作用,但失败的是:

I/AwesomePlayer(  124): setDataSource_l(URL suppressed)
E/        (  124): Failed to open file '/android_asset/www/sound.mp3'. (No such file or directory)

这看起来像路径问题,但我已经尝试了所有可以想到的排列。我认为它更基础,比如AwesomePlayer无法访问存储在android_asset目录中的mp3。

使用Media插件进行phonegap可以正常使用其他答案,但由于音频标签适用于外部媒体,而Media插件适用于内部媒体,因此这似乎很容易解决。我还有一个巨大的工作应用程序,在任何地方使用音频标签,我真的不想重写它使用媒体插件。是否有一个简单的明显修复,或者我应该提交错误报告?

2 个答案:

答案 0 :(得分:5)

让我总结一下我在类似主题的各种问题/答案中找到的内容:

  • Android WebView中的音频标签有点破碎。所以,这是一个错误。
  • 使用音频标签播放本地文件在iOS和桌面浏览器上运行良好
  • 从SD卡播放本地文件适用于Android:

    <audio controls="controls">
       <source src="file:///sdcard/test.mp3" type="audio/mpeg"/> 
    </audio>
    
  • 如果您希望立即播放Android设备上的文件,则使用Media对象的当前实现是唯一的选择。

探索链接:

答案 1 :(得分:0)

到目前为止,我唯一的解决方案是动态重写音频标签作为phonegap Media启用按钮。不太好:

$("audio").replaceWith (option,element) ->  "
  <span class='audio' data-src='#{$(element).attr('src')}'>
    <button class='Play'>Play</button>
    <button style='display:none' class='Pause'>Pause</button>
    <button style='display:none' class='Reset'>Reset</button>
  </span>
"

$("span.audio").on "click", "button.Play", (event) ->
  audioTarget = $(event.target).parent()
  unless audioTarget.data("audio")?
    path = "/android_asset/www/#{audioTarget.attr("data-src")}"
    audioTarget.data("audio", new Media(path))
  audioTarget.data("audio").play()
  $(event.target).hide().siblings().show()

$("span.audio").on "click", "button.Pause", (event) ->
  $(event.target).parent().data("audio").pause()
  $(event.target).hide().siblings().show()

$("span.audio").on "click", "button.Reset", (event) ->
  $(event.target).parent().data("audio").seekTo(0)
  $(event.target).hide().siblings().show()