wkWebView无法播放本地音频

时间:2015-09-25 10:19:34

标签: javascript ios audio ios9 wkwebview

自iOS9发布以来,我们可以使用wkWebView

使用loadFileURL:allowingReadAccessToURL:呈现本地HTML

到目前为止这看起来不错,但是我们在HTML中播放本地mp3时遇到了问题。 有一个带有<audio>属性的src标记,其中包含mp3文件的相对路径。

iOS9-Simulator正确播放我们的mp3,但物理设备没有。使用JavaScript捕获错误会显示networkState NETWORK_NO_SOURCE,这对我们没有意义...... 使用http URL作为src并从网络流式传输mp3工作正常。

是否有人设法使用wkWebView播放本地音频文件?

3 个答案:

答案 0 :(得分:2)

我在iOS 9.2上也遇到过这个问题。具有本地URL的视频在模拟器上可以正常播放,但在设备上则无法播放。使用Safari工具进行调试显示视频错误为相同的无源错误。我们为它提交了一个雷达:http://www.openradar.me/24281444 这是一个疯狂的部分 - 一个工作的kludgy解决方法(无需运行本地Web主机)是我们发现如果您首先在UIWebView中播放视频,那么wkwebview视频将起作用。我们更进了一步,使用了一个隐藏的UIWebview来播放半秒视频,没有声音在标签和web视图中有自动播放属性 uiWebView.mediaPlaybackRequiresUserAction = false 虽然hacky和我看过的任何东西都会导致WKWebview播放视频。这是解决问题的另一个解决方案。

答案 1 :(得分:1)

WKWebView内的代码似乎无法访问本地文件。我不知道这是预期的行为还是一个错误(雷达,任何人?)

在iOS 9中引入loadFileURL:allowingReadAccessToURL:之前,有workaround加载本地HTML文件,方法是将其复制到tmp/www

令人惊讶的是,那里的文件可以从WKWebView内部进行访问 - 包括媒体文件。

答案 2 :(得分:0)

非常简单的修复实际上你只需要在src URL前加上localhost和你的WKWebview端口(默认为12344)。

将A转为B:

<!-- A -->
<audio src="img/beep.mp3" controls></audio>

<!-- B -->
<audio src="http://localhost:12344/img/beep.mp3" controls></audio>