AMP

amp-youtube

实验性
Bento

描述

显示 YouTube 视频。

 

必需脚本

<script async custom-element="amp-youtube" src="https://cdn.ampproject.org/v0/amp-youtube-1.0.js"></script>

用法

显示 YouTube 视频。

使用自适应布局时,示例中的宽度和高度应为 16:9 宽高比的视频产生正确的布局

<amp-youtube
  data-videoid="mGENRKrdoGY"
  layout="responsive"
  width="480"
  height="270"
></amp-youtube>
<amp-youtube
  id="myLiveChannel"
  data-live-channelid="UCB8Kb4pxYzsDsHxzBfnid4Q"
  width="358"
  height="204"
  layout="responsive"
>
  <amp-img
    src="https://i.ytimg.com/vi/Wm1fWz-7nLQ/hqdefault_live.jpg"
    placeholder
    layout="fill"
  />
</amp-youtube>

在有效 AMP 文档之外的独立使用

Bento AMP 允许您在非 AMP 页面中使用 AMP 组件,而无需承诺使用完全有效的 AMP。您可以将这些组件放置在不支持 AMP 的框架和 CMS 的实现中。请阅读我们的指南,了解更多信息:在非 AMP 页面中使用 AMP 组件

<head>
  <script async src="https://cdn.ampproject.org/v0.js"></script>
  <link rel="stylesheet" type="text/css" href="https://cdn.ampproject.org/v0/amp-youtube-1.0.css">
  <script async custom-element="amp-youtube" src="https://cdn.ampproject.org/v0/amp-youtube-1.0.js"></script>
</head>
<body>
  <amp-youtube
    style="aspect-ratio: 16/9"
    id="my-youtube-video"
    data-videoid="mGENRKrdoGY"
  ></amp-youtube>
  <script>
    (async () => {
      const video = document.querySelector('#my-youtube-video');
      await customElements.whenDefined('amp-youtube');
      const videoHandle = await video.getApi();

      // programatically call playback actions
      videoHandle.play();
      videoHandle.pause();
      videoHandle.requestFullscreen();
      videoHandle.mute();
      videoHandle.unmute();

      // get video state
      console.log({
        autoplay: videoHandle.autoplay,
        controls: videoHandle.controls,
        duration: videoHandle.duration,
        currentTime: videoHandle.currentTime,
        loop: videoHandle.loop,
      })
    })();
  </script>
</body>

交互性和 API 用法

Bento 通过其 API 实现高度交互。在 Bento 独立使用中,元素的 API 取代了 AMP 操作和事件以及 amp-bind

可以通过在文档中包含以下脚本标记来访问 amp-youtube 组件 API

await customElements.whenDefined('amp-youtube');
const videoHandle = await video.getApi();
操作

amp-youtube API 允许您执行以下操作

play()

播放视频。

videoHandle.play();
pause()

暂停视频。

videoHandle.pause();
mute()

静音视频。

videoHandle.mute();
unmute()

取消静音视频。

videoHandle.unmute();
requestFullscreen()

在可能的情况下将视频展开为全屏。

videoHandle.requestFullscreen();

属性

它还公开以下只读属性

currentTime (number)

当前播放时间,以秒为单位。

console.log(videoHandle.currentTime);
duration (number)

视频的持续时间,以秒为单位(当已知时,例如不是直播时)。

console.log(videoHandle.duration);
autoplay (boolean)

视频是否自动播放。

console.log(videoHandle.autoplay);
controls (boolean)

视频是否显示控件。

console.log(videoHandle.controls);
loop (boolean)

视频是否循环播放。

console.log(videoHandle.loop);

从 0.1 版本迁移

实验性 1.0 版本的 amp-youtube 不会自动将 data-param-controls 转换为 controls。相反,它直接将 controls 作为属性。

属性

autoplay

如果存在此属性,并且浏览器支持自动播放

  • 视频会在开始自动播放前自动静音
  • 当视频滚动出视图时,视频会暂停
  • 当视频滚动到视图中时,视频会继续播放
  • 当用户点击视频时,视频会取消静音
  • 如果用户已与视频互动(例如,静音/取消静音、暂停/恢复等),并且视频滚动进出视图,则视频的状态将保持用户离开时的状态。例如,如果用户暂停视频,然后将视频滚动出视图并返回视频,则视频仍会暂停。

loop

如果存在此属性,则视频或播放列表将在结束后再次播放(从头开始)。

data-videoid

在每个 YouTube 视频页面 URL 中找到的 YouTube 视频 ID。

例如,在此 URL 中:https://www.youtube.com/watch?v=Z1q71gFeRqMZ1q71gFeRqM 是视频 ID。

data-live-channelid

提供稳定直播 URL 的 YouTube 频道 ID。例如,在此 URL 中:https://www.youtube.com/embed/live_stream?channel=UCB8Kb4pxYzsDsHxzBfnid4QUCB8Kb4pxYzsDsHxzBfnid4Q 是频道 ID。您可以提供 data-live-channelid 而不是 data-videoid 属性,以嵌入直播的稳定 URL 而不是视频。频道不附带默认占位符。您可以为上面的示例 2 中的视频提供占位符。

data-param-*

所有 data-param-* 属性(data-param-autoplaydata-param-loop 除外)都将作为查询参数添加到 YouTube iframe src。这可用于将自定义值传递给 YouTube 插件,例如是否显示控件。

键和值将进行 URI 编码。键将使用驼峰式命名

controls

请参阅 YouTube 嵌入式播放器参数,了解有关 YouTube 的更多参数选项。

请使用 autoplay 属性而不是 data-param-autoplay,并使用 loop 属性而不是 data-param-loop,因为自动播放和循环行为都由 AMP 而不是 YouTube 播放器在内部处理。

credentials (可选)

按照 Fetch API 指定的方式定义 credentials 选项。

  • 支持的值:omitinclude
  • 默认值:include

如果要使用隐私增强模式下的 YouTube 播放器,请传递值 omit

通常,YouTube 会在播放器加载时设置其 Cookie。在隐私增强模式下,Cookie 会在用户点击播放器时设置。

title (可选)

为组件定义一个 title 属性,以传播到基础 <iframe> 元素。默认值为 "YouTube 视频"

通用属性

此元素包含扩展到 AMP 组件的通用属性

需要更多帮助?

您已经阅读过本文档十几次了,但它并没有真正涵盖您的所有问题?也许其他人也有同感:请在 Stack Overflow 上联系他们。

转到 Stack Overflow
发现错误或缺少功能?

AMP 项目强烈鼓励您的参与和贡献!我们希望您能成为我们开源社区的持续参与者,但我们也欢迎您为自己特别热衷的问题做出一次性贡献。

转到 GitHub