【问题标题】:YouTube Restricted Playback IssueYouTube 限制播放问题
【发布时间】:2016-10-31 18:21:00
【问题描述】:

我无法嵌入某些 YouTube 视频。

我收到的错误如下:

该视频包含来自 VEVO 的内容,该视频已阻止其在本网站上显示。

我不认为它只是限制嵌入,因为我正在测试的视频显示,嵌入其他网站,例如:

http://youtubeonrepeat.com/watch/?v=fk4BbF7B29w

我正在使用 YouTube IFRAME API 加载视频,并尝试使用诸如“origin”和“enablejsapi”之类的播放器变量嵌入视频,但无济于事。

例子:

  var player;
  function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
      height: '390',
      width: '640',
      videoId: 'fk4BbF7B29w',
      playerVars: {
        'origin': 'https://api.specivid.com',
        'enablejsapi' : 1
      },
      events: {
        'onReady': onPlayerReady,
        'onStateChange': onPlayerStateChange
      }
    });
  }

我只是 SOL 还是我错过了什么?

我正在测试嵌入的页面是: https://api.specivid.com/test.php

谢谢。

【问题讨论】:

    标签: javascript php youtube youtube-api


    【解决方案1】:

    我认为如果您阅读 Understand Playback Restrictions 会有所帮助。

    随着内容控制的增强,复杂性也随之增加。唯一的 确定用户是否有权观看视频的万无一失的方法是 请他们尝试观看。所以,如果你正在编写一个应用程序并且 您想阻止用户看到他们没有的视频 观看能力,以下是要检查的事项列表:

    1. yt:accessControl

    可嵌入第三方应用程序的视频将具有以下内容:

    <yt:accesscontrol action='embed' permission='allowed' />
    

    如果您只想搜索可嵌入的视频,请将format=5 添加到您的查询中。 正如视频可以嵌入或不可嵌入一样,它也可以是可联合的:

    <yt:accesscontrol action='syndicate' permission='allowed' />
    

    可嵌入但不可联合的视频将在 YouTube.com 或其他嵌入了 YouTube 播放器的网站上播放,但可能无法在手机或电视等设备上播放。如果您想详细了解如何检索适合在移动设备上播放的视频,请参阅开发者指南。

    1. 地理限制

    某些视频可能在某些国家/地区受到限制。此限制适用于查看器所在的位置,而不是您的第三方服务器所在的位置。例如,如果一个视频在美国被屏蔽,它将具有以下内容:

    <media:restriction type='country'
      relationship='deny'>US</media:restriction>
    

    查询时,可以添加限制参数,过滤特定IP客户端或特定国家无法播放的视频。

    1. yt:state

    检查 API 响应中视频的 yt:state 也很重要。即使yt:accessControl 表示允许联合,yt:state 也可能会覆盖它。例如,具有有限联合的视频将具有以下内容:

    <app:control>
      <yt:state name='restricted' reasoncode='limitedSyndication'>
        Syndication of this video was restricted by its owner.
      </yt:state>
    </app:control>
    

    您可能还会看到“内容所有者限制了此视频的联合发布”消息。因此,即使上传者允许联合,内容所有者也可以覆盖它并禁止联合。例如,如果有人上传的视频包含其他内容所有者拥有的配乐,就会发生这种情况。

    1. 出租

    有些 YouTube 视频是租借的。你可以说它们是出租的,因为它们有一个media:price 标签:

    <media:price type='rent' price='1.99' currency='USD' yt:duration='PT2592000S' />
    

    请注意,media:price 标记仅在您在查询中使用开发人员密钥时才会包含在响应中。如果您正在构建一个非基于浏览器的 YouTube 应用程序,用户无法租借视频,您可能希望过滤掉租借视频。你可以通过传递参数paid-content=false来做到这一点。

    1. 目前未通过 API 公开的其他限制

    有时会出现更微妙的限制。目前并非所有这些都可以通过 API 查询。例如,某些视频只能在特定的一组域上播放。正如我上面提到的,了解用户是否有权观看视频的唯一万无一失的方法是让他们尝试观看。

    另外,请查看Embed a player using an <iframe> tag 上的 Youtube 指南。

    【讨论】:

    • 谢谢!我很欣赏非常彻底的回应。
    猜你喜欢
    • 2015-11-12
    • 2013-11-09
    • 2019-07-20
    • 2017-04-21
    • 2010-11-30
    • 1970-01-01
    • 2022-01-04
    • 2013-06-05
    • 1970-01-01
    相关资源
    最近更新 更多