ビデオの自動再生 (YouTube の自動再生 = 1 を含む) は、iOS Safari では機能しません。このことは、Apple と多数のブログ投稿の両方によって徹底的に文書化されています。ただし、これは YouTube ビデオのカスタム コントロールを使用する際に問題を引き起こします。どこにも明確な「はい」/「いいえ」の答えが見つからないということです。単純な HTML5 ビデオ タグを使用した場合は問題ありませんが、すべての異なるプラットフォーム用にすべてのビデオをエンコードする必要はありません。
私が達成する必要があるのは:
- カバー画像が表示されます (上部に再生アイコンが付いたフラット PNG)。
- ユーザーがカバー画像をクリックすると、画像が再生を開始する YouTube ビデオに置き換えられます。
これはクリックによって開始されるため、ユーザーの観点からは自動再生ではありません。ただし、Flash 以外のすべてのデバイスでは、YouTube の埋め込みが iframe に表示されるため、ビデオが効果的に読み込まれ、自動再生されます (少なくとも、私はそう思います)。この問題の回避策を知っている人はいますか?
このスニペットは問題を示しています。FireFox などでは動作しますが、iOS Safari では読み込みインジケータが表示され、黒い画面で終了します。
「apple-mobile-web-app-capable」メタ タグを追加してホーム画面からサイトを起動すると、動画は正しく再生されます。
<div id="movieContainer" style="width: 768px; height: 432px; border: 1px solid #cccccc;">Initializing player API...</div>
<div id="status">Initializing player API...</div>
<button onclick="player.playVideo();">Play</button>
<script>
// Load the IFrame Player API code asynchronously.
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var playerAPIIsLoaded = false;
function onYouTubePlayerAPIReady()
{
playerAPIIsLoaded = true;
document.getElementById("status").innerHTML = "Player API initialized!";
}
var player = null;
function initMovie()
{
document.getElementById("status").innerHTML = "Loading video..."
player = new YT.Player(
'movieContainer',
{
height: '432'
, width: '768'
, playerVars: { 'autoplay': 0, 'controls': 2, 'rel': 0, 'showinfo': 0 }
, videoId: 'MwnZr4VJQPQ'
, events: { 'onReady': function (event) { document.getElementById("status").innerHTML = "Video loaded!";/*event.target.playVideo();*/ } }
}
);
}
window.onload = initMovie;
</script>