【问题标题】:Youtube iFrame API setPlaybackQuality ignored on mobile deviceYoutube iFrame API setPlaybackQuality 在移动设备上被忽略
【发布时间】:2015-02-18 03:49:33
【问题描述】:

我正在尝试设置 YouTube iframe API 以播放质量较低的全高清视频。我的目标是节省移动设备的带宽并减少加载时间。我的 HTML 结构是经典的播放器 div,加上一个用于消息的调试 div。

HTML

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

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

我尝试在播放器准备好后立即调用setPlaybackQuality,以避免移动用户在缓冲上浪费时间(正如post 中所建议的那样)。我还在“缓冲”和“播放”状态下都调用了它。当质量发生变化时,调试内容会更新为实际播放质量。

JAVASCRIPT

/* 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 上测试)。有解决办法吗?

【问题讨论】:

  • +1。我遇到了同样的问题,已经在 onReady、onStateChange 和 BUFFERING 和 PLAYING 中尝试过,所有这些都是单独的和各种组合的——它们都不起作用。我提交了这个问题:code.google.com/p/gdata-issues/issues/…
  • 在 iOS 上,视频质量是根据 iFrame 播放器的大小直接设置的。因此,无论您设置什么尺寸,移动播放器总是会覆盖您的设置,以匹配最接近播放器尺寸的尺寸。这是 YouTube 为 iOS 开发人员提供的播放器助手(实际上只是 web 视图中的 iFrame 播放器)的一个大问题。 YouTube 声称这样做是为了避免在移动设备上使用不必要的数据。
  • @JAL:嗯。那么,我将它设置为接近指定的最小尺寸 - 大约 350 x 200。它不应该尝试将其设置为 240p 吗?而且由于它实际上是 175 x 100 \@2x,它不是更接近 144p 吗?我认为这是 YT iFrame API 方面的一个问题,因为我也注意到 on the desktop seeking to lower quality doesn't work but seeking to higher quality does.
  • iFrame API 在移动设备上无法正常工作,期间。考虑到它是下一个要弃用的 API(并且是 subject to deprecation at any moment),我怀疑 Google 是否正在努力解决与移动设备上的 iFrame 播放器相关的所有问题。
  • @JAL:嗯。是否有任何替代 iFrame API 的方法可以让开发者在 YouTube 平台被弃用后将其集成到他们的应用程序中?

标签: iframe mobile youtube-api playback youtube-iframe-api


【解决方案1】:

我发现的解决方法是创建没有videoId 的播放器,不要在其他任何地方调用setPlaybackQuality,而是在onReady 处理程序中调用loadVideoById(videoId, 0, desiredQuality)。在测试时,这在 Android 和 iOS 上都得到了尊重,在 Android 和桌面上调用 onPlaybackQualityChanged 一次质量正确,在 iOS 上调用两次,从不将质量更改为更高或更低。

很遗憾,如果您通过了视频中没有的任何质量,它将强制为“中等”。请注意这一点。此外,这不太可能打破 API 在 iOS 上所做的任何质量上限,以防止在 3G/4G/LTE 网络上使用无关数据。

【讨论】:

  • 我按照您的步骤操作,但它对我不起作用。您知道自您回答后 API 的行为是否发生了变化?
  • 最近没查过。您在哪个平台上遇到问题,并且您绝对确定您正在使用带有 3 个参数的 loadVideoById(不是 cueVideoById 或类似的),从不调用 setPlaybackQuality,并且您正在播放的视频实际上具有您尝试设置的播放质量?它实际设置的质量是什么?
  • 是的,我正在使用 loadVideoById。我正在 Android 和 iOS 上尝试 Chrome。无论我做什么,我总是在我的 iPhone 5 上获得中等质量,在我的 Nexus 5 上获得大质量。完全相同的代码在桌面浏览器上运行良好,我可以更改质量。
  • 啊,我只用 WebView (Android) 和 UIWebView/WKWebView (iOS) 测试过,不知道会不会有影响。我最后一次测试这个可能是大约 6 个月前,所以 YMMV。很抱歉听到它不起作用,如果您找到解决方法,请告诉我!
  • 感谢您的信息 :) 我会在周末做更多的工作,如果我找到解决方法一定会通知您。
【解决方案2】:

现在是 2020 年,YouTube 已弃用 setPlaybackQuality 函数。

目前无法强制嵌入视频的播放质量。即使将播放器设置为 144px 宽度似乎也不再起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-02
    • 2017-05-11
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 2020-06-27
    • 2012-12-30
    相关资源
    最近更新 更多