以较低的质量加载Youtube iFrame API视频

时间:2015-05-26 20:21:33

标签: youtube-iframe-api

目前,我们有一个YouTube iFrame API设置,其中包含以下(漂亮样板文件)代码:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://www.youtube.com/iframe_api"></script>
<script>
  var player;
  YT.ready(function() {
    player = new YT.Player('player', {
      videoId: 'iyBaInK2TsI',
      width: 200,
      height: 200,
      events: {
        onReady: "onReady",
        onStateChange: "onStateChange",
        onPlaybackQualityChange: "onPlaybackQualityChange",
        onError: "onPlayerError"
      },
      playerVars: {
        fs: 0, // hide fullscreen button by default
        playsinline: 1, // make the player not go fullscreen when playing on ios
        modestbranding: 1, // hide youtube logo by default - we say 'powered by youtube'
        controls: 0, // hide controls by default
        showinfo: 0, // hide video title by default
        iv_load_policy: 3, // hide annotations by default
        rel: 0
      }
    });

    console.log('available quality levels after create = ' + player.getAvailableQualityLevels());
  });
  // onReady, onStateChange, onPlaybackQualityChange, onPlayerError handlers...
</script>

它的长短之处在于它始终以“中等”质量加载视频。无论是在桌面还是移动设备上,拨打setPlaybackQuality('small')都不会影响视频质量。

我尝试在onReady中调用setPlaybackQuality('small'),在状态变为BUFFERING或PLAYING时调用onStateChange,并在视频播放,未播放或暂停时在JavaScript控制台中单独调用。

当用户尝试在3G / 4G连接上加载播放器时,这会出现一个大问题。据我所知,3G正在逐步淘汰视频流,但仍有大量用户使用3G连接,而144p的流量实际上使得视频在3G上成为可能,而240p则使得视频在4G(非LTE)上成为可能。 / p>

当我选择以hd720作为质量选项的视频时,我可以调用setPlaybackQuality('hd720')并且它可以正常工作。

我的具体问题是,我的配置中是否有任何内容可以阻止切换到较低的质量,并且是否有一组可以解决此限制并触发实际更改的播放质量的命令?

1 个答案:

答案 0 :(得分:3)

我找到的解决方法是创建没有videoId的播放器,不要在其他任何地方调用setPlaybackQuality,而是在loadVideoById(videoId, 0, 'small')处理程序内调用onReady。测试结果在Android和iOS上均得到尊重,在Android和桌面上调用onPlaybackQualityChanged 'small'一次,在iOS调用两次,从不强制中等质量。

不幸的是,如果你通过'tiny',它似乎不起作用。在大多数视频中,它会强制'small';然而,根据我的经验,它之前被迫'medium'。要注意这一点。