HTML5视频标签在Safari浏览器、iPhone和iPad上无法正常工作。
HTML5 Video标签在Safari、iPhone和iPad上不起作用的问题,可能是由于Web服务器不支持HTTP字节范围请求。在我使用的Web服务器上就是这种情况,结果是视频小部件加载并显示播放按钮,但点击按钮没有任何效果。视频在Firefox和Chrome上工作正常,但在iPhone和iPad上不工作。
关于字节范围请求,可以在mobiforge.com的这里的"附录A: 为Apple iPhone进行流媒体传输"中阅读更多内容:
首先,Safari浏览器请求内容,如果是音频或视频文件,它会打开自己的媒体播放器。然后,媒体播放器会请求内容的前2个字节,以确保Web服务器支持字节范围请求。如果支持,iPhone的媒体播放器会通过字节范围请求请求剩余的内容并进行播放。
您可能想在网络上搜索"iphone mp4 byte-range"。这里还有另一个很好的资源,用于配置服务器以支持字节范围请求。
这就是我的问题所在。我正在使用Flask的'send_file'和'send_from_directory'调用。我必须在这些调用中添加'conditional=True'参数。
这个答案适用于我,并在我的Play Framework实现(2.7)中起作用。使用RangeResult.ofPath(finalPath, range, Some(mime))
,应该适用于2.7及以上版本。
附注:忘记了如何获取范围。这个调用可以获取范围。它以"Range"的形式传入。`val range = request.headers.get("Range")`
谢谢,这对我也有用(使用Python内置的http服务器不起作用--移动Safari拒绝播放视频,因为Web服务器不支持字节范围请求)。可以使用npmjs.com/package/http-server来实现这个目的--它支持字节范围!
问题出现的原因:iPad上的视频无法播放,除非设置controls="true"标志。
解决方法:在video标签中添加controls="true"属性。
文章内容如下:
对于未来的搜索者来说,还有另一个可能的解决方法:
(如果您的问题不是一个mimetype问题。)
由于某种原因,除非我设置controls="true"标志,否则iPad上的视频无法播放。
例如:这在iPhone上对我起作用,但在iPad上不起作用。
<video loop autoplay width='100%' height='100%' src='//some_video.mp4' type='video/mp4'></video>
现在,这在iPad和iPhone上都可以工作:
<video loop autoplay controls="true" width='100%' height='100%' src='//some_video.mp4' type='video/mp4'></video>
这也是我的问题...直到我在video标签中添加了controls属性,没有任何东西起作用。
这对我来说非常完美。对于未来的读者,我在上面的代码中使用video标签嵌入了一个mp4视频。谢谢!
对我来说,添加autoplay
选项起作用了。我的代码中有controls="false"
。
controls="false"
是多余的;controls
本身是一个布尔值,当它存在时,打开控制,当它不存在时,没有控制。请参阅W3C规范。
另外,由于controls
是一个布尔属性,唯一有效的值是none,空字符串或它自己的名称。True和false值是不正确的。
HTML5 Video标签在Safari、iPhone和iPad上无法工作的原因可能有多种。有些用户反馈说,关闭低电量模式可以解决该问题。另外,视频标签中添加playsinline
属性也可以解决这个问题。下面是一个示例代码:
<video class="video-background" autoplay loop muted playsinline>
只有添加了playsinline
属性才能正常工作。有些用户表示,虽然添加了"playsinline",视频控件仍然不显示,但这个方法在iPhone上完美解决了问题,而且在其他设备上也可以正常工作,而且不显示控件。对于使用React的用户,需要使用playsInline
,采用驼峰式命名。
还有一些用户指出,这个问题不仅仅是浏览器本身的问题,而是iPhone上的通用问题,因为他们的视频在其他浏览器上也不能播放。
对于一些用户来说,很遗憾,playsinline
并不能解决问题。
还有一些用户表示,添加了宽度、高度和preload="auto"之后问题得到了解决。
总之,根据用户的反馈,关闭低电量模式、添加playsinline
属性以及设置视频标签的宽度、高度和preload属性可能是解决HTML5 Video在Safari、iPhone和iPad上无法工作的方法。