更新:(旧答案不再适用)
使用iphone-inline-video JS 模块。您可以让您的 360 度视频在线播放(无需固定到主屏幕)。
我已尝试更新该模块的文档,以便在此处演示如何将 Aframe 与 iOS 一起使用。
这是完整性的来源(您的视频必须是本地的,见下文):
<!DOCTYPE html>
<!-- Source: https://github.com/aframevr/aframe/blob/v0.3.2/examples/boilerplate/360-video/index.html -->
<html>
<head>
<meta charset="utf-8">
<title>Aframe 360 Video with iOS Support</title>
<meta name="description" content="360 Video — A-Frame">
<style>
#playoverlay { position: relative; }
#play-button {
position: absolute;
bottom: 30px;
left: 30px;
}
/* Hide native iOS controls */
.IIV::-webkit-media-controls-play-button,
.IIV::-webkit-media-controls-start-playback-button {
opacity: 0;
pointer-events: none;
width: 5px;
}
</style>
</head>
<body>
<a-scene>
<a-assets>
<video id="video" src="sample.mp4" autoplay loop crossorigin playsinline></video>
</a-assets>
<a-videosphere src="#video" rotation="0 180 0"></a-videosphere>
</a-scene>
<div id="playoverlay">
<button id="play-button">Play / Pause</button>
</div>
<script src="https://aframe.io/aframe/dist/aframe.js"></script>
<script src="../dist/iphone-inline-video.browser.js"></script>
<script>
(function() {
var video = document.querySelector('#video');
window.makeVideoPlayableInline(video, /* mute necessary for autoplay*/ false);
var playButton = document.querySelector('#play-button');
playButton.addEventListener('click', function(e) {
if (video.paused) {
video.play();
} else {
video.pause();
}
});
})();
</script>
</body>
</html>
iOS/移动 Safari 警告:
在iOS
视频源上必须是本地的(iOS/Safari 似乎是唯一有视频 CORS 问题的主要浏览器,并且src
(取决于软件/硬件),视频可能需要在一定的分辨率下。例如,支持iPhone 5,我发现我无法播放任何大于 1920x1080 的视频,YMMV...
其他注意事项:
- 通过控件控制 360 度视频的音频是不行的。iOS Safari 上的音量是只读的(请参阅此处)。
- iOS 上的 Safari 不允许在 iFrames 中进行陀螺仪/传感器检测- 因此,如果您希望陀螺仪/加速度计正常工作,请确保您的视频没有嵌入到其他任何地方(请参阅此处),这样您的 iOS 用户就不会得到任何好处A-Frame免费提供的运动控制。
- iOS/Safari 不支持全屏(
iOS Safari doesn't have a fullscreen API, but we do on Chrome on Android, Firefox, and IE 11+
),请参阅此处。“Safari 支持全屏视频”的论点仅在它回退到其本机播放器时才有效(在这种情况下,A-Frame/Three.js 环绕画布球体的 360 度视频纹理不起作用,因为您有一个平面360 度视频,看起来很糟糕)。
让视频(在我的情况下是 360 度视频)在 iOS 上播放是一个相当大的挑战,但可以通过大量的让步来实现。