15

YouTube iframe API をセットアップして、低品質の FullHD ビデオを再生しようとしています。私の目標は、モバイル デバイスの帯域幅を節約し、読み込み時間を短縮することです。私の HTML 構造は、従来のプレーヤー div と、メッセージ用のデバッグ div です。

HTML

<div id="debug"></div>

<div id="your_video_id">
  <div id="player"></div>
</div>

setPlaybackQualityモバイル ユーザーがバッファリングで時間を無駄にしないように、プレーヤーの準備が整うとすぐに呼び出すようにしました (この投稿で提案されているように)。また、「BUFFERING」と「PLAYING」の両方の状態で呼び出しました。品質が変化すると、デバッグ コンテンツが実際の再生品質で更新されます。

ジャバスクリプト

/* Trigger player ready */
function onPlayerReady(event) 
{
    player.setPlaybackQuality("small");
}

/* Detect playback quality changes */
function onQualityChange(event) 
{
    document.getElementById("debug").innerHTML = event.data;
}

/* Trigger player events */
function onPlayerStateChange(event) 
{
    if (event.data == YT.PlayerState.BUFFERING) 
    {
        player.setPlaybackQuality("small");
    }

    if (event.data == YT.PlayerState.PLAYING) 
    {
        player.setPlaybackQuality("small");
    }
}

コードはデスクトップでは動作するように見えますが (デバッグは正しく「小」に設定されています)、モバイルでは無視されます (デバッグは「大」に設定され、Android 4.2.2 でテスト済み)。これに対する解決策はありますか?

4

2 に答える 2

6

私が見つけた回避策は、プレイヤーを no で作成し、他の場所では呼び出さず、ハンドラー内で呼び出すvideoIdことです。これは、テスト時に Android と iOS の両方で尊重され、Android とデスクトップで 1 回、iOS で 2 回、正しい品質で呼び出し、品質を高くしたり低くしたりすることはありませんでした。setPlaybackQualityloadVideoById(videoId, 0, desiredQuality)onReadyonPlaybackQualityChanged

残念ながら、ビデオで利用できない品質を渡すと、「中」が強制されます。そのことに注意してください。また、API が 3G/4G/LTE ネットワークでの無関係なデータ使用を防ぐために iOS で行う品質制限を破る可能性は低いです。

于 2015-05-28T16:04:08.143 に答える