一部の動画には、200*200 (px) 未満のサイズの動画を埋め込むことができないという制限があるようです。この制限は、すべてのビデオに適用されるわけではありません (最終更新の youtube API よりも古いかもしれませんが、わかりません)。
いくつかのテストの後、この制限は、YouTube プレーヤーの ReadyState がステータスに変更されたときに適用されます。PlayerState.PLAYING (evt.data === 1)
したがって、基本的な回避策として、ステータスが更新された後に「オンザフライ」で iframe のサイズを変更できます。以下のデモとコードを参照してください。
デモ
var player,
myWidth = "114px",
myHeight = "65px";
function onYouTubePlayerAPIReady() {
player = new YT.Player('testVideo', {
height: myWidth,
width: myHeight,
videoId: '-rMTExNTx2s',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
},
playerVars: {
controls:0,
showinfo:0
}
});
}
function onPlayerStateChange(evt) {
if (evt.data == -1) {
evt.target.a.width = "200px";
evt.target.a.height = "200px";
}
else if (evt.data == 1) {
evt.target.a.className = "";
evt.target.a.width = myWidth;
evt.target.a.height = myHeight;
done = true;
}
}
この DEMO でわかるように、css で隠しクラスを設定し.hidden{opacity:0}
ます。これは、ビデオがロードされる前にプレーヤーを非表示にするために使用されます。使用display:none;
しても機能しません。これは確かに他の API の制限です。このデモでは、プレーヤーが表示されるまで、ビデオの再生が開始されるまで待つ必要があります。たとえば、サムネイル画像を使用し、readystate が変更されたときに負のオフセット プレーヤーから目的の場所に移動するなど、ニーズに合った最適な回避策を見つける必要があります。