【问题标题】:HTML5 audio blob would not play on AndroidHTML5 音频 blob 无法在 Android 上播放
【发布时间】:2014-09-19 01:13:33
【问题描述】:

我正在使用 BlobStore 从我的 GAE 应用程序中提供一个音频文件(包含一个简短的未压缩 PCM 的 WAV 文件)。 在点击事件中,我设置audio.src 并调用audio.play()

现在是奇怪的部分:

  • 在本地工作时 - 它在 IOS 和 Android 上运行良好。
  • 部署到 GAE 后,它在 IOS 上运行良好 - 但在 Android 上不行

没有显示错误 - 它只是什么都不播放。 据我从 GAE 日志中可以看出,音频文件 在所有情况下都提供。 如果是 Android,我可以看到来自“Player/LG Player 1.0 for Android 4.4.2(stagefright 替代品)”的请求。

知道发生了什么,或者如何调试它?


更新

根据 Stuart Langley 的建议,尝试播放 Google Cloud Storage 中的文件。
在这种情况下,Android 运行良好,而 IOS 则不行(间歇性地。有时会出错)。

因此,对我有用的解决方法是将文件存储在 Cloud Storage 上,并调用 createGsBlobKey 以将其作为 blob 提供。 在客户端,我检查它是否是 Android (navigator.userAgent.match(/Android/i))。对于 Android,我将 audio.src 设置为 Cloud Storage 文件,对于 IOS,我将其设置为我的 servlet,它使用 BlobstoreService.serve 和我从 createGsBlobKey 获得的 blob 密钥来提供文件。

这是一个繁琐的解决方法,我没有检查其他移动操作系统以了解每个操作系统的工作原理,所以如果有人有更好的解决方案,请告诉我。

【问题讨论】:

    标签: android html google-app-engine html5-audio blobstore


    【解决方案1】:

    这很可能是由于提供 blob 时的分块响应。

    Here 是关于音频文件在某些​​浏览器中无法正确播放的问题跟踪器项目。

    Here 是我在回来的时候整理的一个测试网站,它说明了这个问题。

    至于解决方法 - 您可以将文件放在云存储上,然后从那里播放,只要您不担心有人盗链文件。

    【讨论】:

    • 我会检查的。但是,Google Cloud Storage 需要计费,我没有启用...
    • 不,它没有 - 每个应用程序都有免费的云存储配额。
    • 所以google pricing page 可能已过时(“重要提示:Google Cloud Storage 需要所有帐户的帐单信息才能开始使用该服务...”)。我试试看。
    • 现在尝试了您的测试网站,并且分块响应似乎在 Android 上运行良好。我还是很疑惑……
    • 尝试了您的建议(谢谢!),请参阅问题更新。
    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多