【问题标题】:YouTube player below "minimum" size低于“最小”尺寸的 YouTube 播放器
【发布时间】:2013-04-23 11:19:15
【问题描述】:

YouTube API 文档将嵌入式播放器 t 的最小尺寸定义为 200 像素 x 200 像素 (link)。

要为关键的播放器功能留出空间,播放器的尺寸必须至少为 200 x 200 像素。

我的测试使我得出结论,这是真的。如果我尝试在小于最小尺寸的播放器中播放视频,我会收到一条错误消息,提示“视频播放器太小”。并且视频不会播放。

但是,较小的播放器是可能的。例如,SwitchCam 在页面 like this one 上使用它们。

我尝试通过设置播放器的高度和宽度属性、使用它的样式属性并将其包装在设置了高度和宽度的包含元素中来减小播放器的大小。这些选项似乎都不起作用。

我还可以尝试什么来减小播放器的尺寸?

编辑

似乎有些视频可以在非常小的播放器中播放,但有些则不会。如果您要测试潜在的解决方案,请使用此视频 ID:-rMTExNTx2s

【问题讨论】:

  • 我认为,当您在 YouTube 网站上时,试用版只会让您获得 HTML5 播放器。我说的是使用 YouTube 播放器 API,这完全是另一回事。
  • 我不完全确定这是真的。我开始为我编写的一个 jQuery 插件创建单元测试(tubeplayer:github.com/nirvanatikku/jQuery-TubePlayer-Plugin),我注意到如果我启用了试用,最小播放器大小错误(onErrorNotEmbeddable)实际上不会被抛出。基本上,如果我启用了试用模式,我可以毫无问题地将视频设置为
  • 我似乎仍然必须要求我的所有用户启用该试用版,否则他们会看到错误。对我来说,这不是一个可行的解决方案。如果 YouTube 整合了该试用版的功能,或许情况会有所改善。
  • 只是为了跟进,你说得对,这不是一个可行的解决方案。只是好奇。

标签: javascript css youtube youtube-api youtube-javascript-api


【解决方案1】:

不是最优雅的解决方案,但您是否考虑过使用CSS3 transform: scale() 属性实际缩小更大的播放器?注意是not supported in IE < 9

这样做的主要原因是,您将减小 UI 控件的大小,从而降低可用性。

【讨论】:

  • 感谢您的想法,我现在就试试这个。 UI 控件的大小不是一个大问题,因为无论如何我都在实现自己的控件。
  • 不幸的是不起作用。 YouTube 检测到播放器“太小”并拒绝播放视频。
【解决方案2】:

似乎对某些视频有限制,不允许嵌入尺寸小于 200*200 (px) 的视频。此限制不适用于所有视频(可能比上次更新的 youtube API 更早,我不知道)。

经过一些测试,当 youtube player readystate 更改为 status: PlayerState.PLAYING (evt.data === 1) 时,会应用此限制

因此,作为一种基本的解决方法,您可以在状态更新后“即时”更改 iframe 的大小,请参见下面的演示和代码:

DEMO

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 限制。 仍然在这个 DEMO 中,您必须等到视频开始播放才能看到播放器出现。 您现在必须找到可以满足您需求的最佳解决方法,例如使用缩略图并在 readystate 发生变化时从负偏移播放器移动到希望的位置,希望您明白这一点。

【讨论】:

  • 那个小提琴可以工作......它可以满足你的需求。那么现在有什么问题呢?
  • 它适用于示例中使用的特定视频。它不适用于所有视频(更重要的是,它不适用于我需要它处理的特定视频集)。如果我更改视频 ID,它会中断:jsfiddle.net/eDZrP/1 如果您可以让它与我的小提琴中的视频 ID 一起使用,或者解释为什么它适用于一个视频而不适用于另一个视频,我会接受。
  • @roasted 非常好。谢谢。
  • @A.Wolff 如何让它不自动播放?
猜你喜欢
  • 2011-02-06
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
相关资源
最近更新 更多