YouTubeの埋め込み動画を自動再生する実装をしようとした際、少しうまくいかないことがあったので対応方法をメモ。
うまくいかなかった例
まずはうまくいかなかった例です。
iframeで埋め込んだ際に、パラメータでautoplayやmuteを設定してみます。
<iframe src="https://www.youtube.com/embed/E7ZoxfoRxWw?autoplay=1&mute=1&playsinline=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
これでPCで閲覧した際は問題なかったのですが、iOSとAndroidともに手持ちのスマホだと自動再生ができませんでした。
うまくいかなかった場合のデモページ
設定としては同じですが、YouTube Player APIを使って埋め込むパターンも試してみます。
<div id="sample"></div>
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
function onYouTubeIframeAPIReady() {
new YT.Player('sample', {
videoId: 'E7ZoxfoRxWw',
playerVars: {
autoplay: 1,
mute: 1,
playsinline: 1
}
});
}
この場合も先ほどと同様、スマホで自動再生ができませんでした。
うまくいかなかった場合のデモページ2
成功した例
YouTube Player APIを使うのは前の例と同じですが、パラメータを使うのではなくmute()やplayVideo()を使って実装すると、スマホでも自動再生できるようでした。
<div id="sample"></div>
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
let ytPlayer;
function onYouTubeIframeAPIReady() {
ytPlayer = new YT.Player('sample', {
videoId: 'E7ZoxfoRxWw',
playerVars: {
playsinline: 1
},
events: {
'onReady': onPlayerReady
}
});
}
// YouTubeの準備完了後、ミュートにして再生開始
function onPlayerReady(e) {
ytPlayer.mute();
ytPlayer.playVideo();
}
これでPCとスマホともに自動再生ができました。
埋め込み動画の自動再生のデモページ
コメントが承認されるまで時間がかかります。