これはユーザーから私に報告され始めたばかりです。私はバグのために自分自身のコードを調べるのに多くの時間を費やしましたが、具体的にはSafari 11(最新)に関連しているようです。Safari 11/YouTube APIのバグ。速い再生/一時停止と自動再生の失敗
YouTube IFrameの埋め込みAPIの簡単な例を使用すると、Safariは再生の状態と一時停止の状態が、一時停止するまで素早く切り替わります。
ここでは、何が有効になるかについていくつかの調査があったため、これは例の最適化バージョンではありません。私は先に飛び越して自動再生したいと思っていましたが、想定されていた方法ではうまくいかないでしょう。私は、とplayVideo
を使用しようとしましたが、これはYTのAPIの例が文書化されています。
この例では、この例にいくつかの詳細なパラメータがある理由を説明するバグであることが確認されたばかりです。
注:
- 時々ビデオでは、リフレッシュ回数に応じて再生されますが、それは非常にまれです。
- 通常、自動再生フラグは失敗します。
- が機能していなかったので、この例では
start
フラグを使用して前方にスキップします。 - コード例、他のブラウザでは動作します、
Chrome
Opera
、Firefox
ここでは、最終的に(がを一時停止)2の上に着陸、プレーヤー州パニックを示しており、Safariのコンソールに表示される場合があります何の画像です。
ここには、バグを複製するコピー/ペーストのコードサンプルがあります。任意のHTMLファイルにドロップし、あなたはそれが特に異なるブラウザや異なるデバイスで働いて自動再生を取得し、私はビデオプレーヤーで多くの問題を経験している
<style>
body, html, iframe {
position: absolute; left: 0; right: 0; top: 0; bottom: 0; width: 100%; height: 100%;
margin: 0;
padding: 0;
pointer-events: none;
}
</style>
<script>
var videoId = "9nwQ1F7oX-8";
var playerVars = {
autohide: 1,
autopause: 0,
autoplay: 1,
cc_load_policy: "0",
disablekb: 1,
enablejsapi: 1,
iv_load_policy: 1,
modestbranding: 1,
origin: "*",
rel: 0,
showinfo: 0,
start: 122,
version: 3
};
</script>
<iframe id="ytplayer"
frameborder="0"
allowfullscreen="1"
title="YouTube video player"
width="100%"
height="100%"
x-src="https://www.youtube.com/embed/9nwQ1F7oX-8?enablejsapi=1&origin=*&rel=0&version=3&iv_load_policy=3&modestbranding=1&showinfo=0&autohide=1&disablekb=1&autoplay=1&autopause=0&cc_load_policy=0&startSeconds=30&widgetid=1"
src="https://www.youtube.com/embed/9nwQ1F7oX-8?enablejsapi=1&origin=*&start=122">
</iframe>
<script>
window.onYouTubeIframeAPIReady = function() {
console.log("YouTube is ready!", videoId, playerVars);
var api = new YT.Player("ytplayer", {
width: "100%",
height: "100%",
videoId: videoId,
playerVars: playerVars,
events: {
onError: function(e) {
// 100 – The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.
// 101 – The owner of the requested video does not allow it to be played in embedded players.
// 150 – This error is the same as 101. It"s just a 101 error in disguise!
console.warn("An error has occurred", arguments);
},
onReady: function() {
// log
console.log("YouTube player is ready to use");
//
api.playVideo();
},
onStateChange: function(e) {
// log
console.log("YouTube state change ", e);
// Finished
if (e.data == 0) {
console.log("Finished");
}
// Playing
else if (e.data === YT.PlayerState.PLAYING) {
console.log("Playing");
}
// Pausing
else if (e.data === 2) {
console.log("Pausing");
}
// Buffering
else if (e.data === 3) {
console.log("Buffering");
}
}
}
});
}
</script>
<script src="https://www.youtube.com/iframe_api"></script>
私はSafariのプレーヤーがYouTubeの再生ボタンを見たのと似たような状況でした。私はディスプレイなしでiframeを隠していましたが、不透明度を0に、そして1になった時点で不透明度を1に変更しました。そして、ビデオは自動再生かボタンのクリックで再生できます –