【问题标题】:How can I tell if a YouTube video is embeddable before I try and load it?在尝试加载 YouTube 视频之前,如何判断它是否可嵌入?
【发布时间】:2012-04-09 02:13:52
【问题描述】:

我有一个无色的 YouTube 播放器,我正在尝试将视频加载到其中,但只有一些视频可以正常工作,而不是全部。如果我没记错的话,那些没有加载的内容是由于版权侵权(例如,卡通的某些情节没有加载,但一个孩子做后空翻的家庭电影可以)。我正在尝试做的是在我们尝试加载它们之后或之前找出这些视频是否可以加载。

例如,以下是 Nataly Dawn 的两个视频。一个加载,另一个不加载。

// loads and plays the video
ytplayer.loadVideoById("GhDGdT33K0k");

// doesn't load/play the video
ytplayer.loadVideoById("-KYUPJIzCyM");

通过查看the working videonon-working video 的数据,我似乎看不到任何表明后者不可嵌入的信息。 [我正在寻找<yt:accessControl> 标签或缺少的yt:format='5'(参见How do I use the Youtube API to check if a video is embeddable?),但无济于事。]

根据我在控制台中的尝试,loadVideoById总是返回undefined,无论视频是否实际加载。我似乎找不到 API 方法来确定视频是否已经这样做了。

【问题讨论】:

标签: youtube embed youtube-api swfobject


【解决方案1】:

您提到的两个视频对我来说似乎都可以加载和播放。例如使用:google code playground 并将您的视频插入 HTML 的选项标签中。

这里有一些提示。

【讨论】:

  • 来自博文“偶尔会出现更微妙的限制。目前并非所有这些都可以通过 API 查询。例如,某些视频只能在特定的一组域上播放. 正如我上面提到的,了解用户是否有权观看视频的唯一万无一失的方法是让他们尝试观看。那我看看你最后的选择。 :)
  • 我最终发现我无法事先确定视频是否会加载;但是,在为 onError 事件设置处理程序后,我能够让它返回错误代码150,“当请求的视频不允许在嵌入式播放器中播放时进行广播。”为什么这会加载到代码游乐场而不是我的特定代码中,谁知道呢。
  • 貌似有些视频是不允许嵌入的,但是在playground你可以看,比如qvr6K02dglc
【解决方案2】:

现在您可以连接嵌入式 api 的 onError 事件并检查错误代码 101 和 150(它们是相同的),这表明视频被阻止嵌入播放。此外,这样做可以让您在发生其他错误(错误请求、html 5 问题等)的情况下采取不同的行动。

function onError(event){
    switch(event.data){
        case 2:
            console.log('request contains an invalid parameter value')
            break
        case 5:
            console.log('The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.')
            break
        case 100:
            console.log('The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.')
            break
        case 101:
        case 150:
            console.log('Uploader has blocked this content from embedded playback')
            break
        default:
            console.log('error code: '+event.data)

    }
}

如果您只希望搜索 api 返回可嵌入的视频结果,请在您的 request 中包含 videoEmbeddable:"true"

【讨论】:

    猜你喜欢
    • 2023-01-09
    • 2012-01-30
    • 1970-01-01
    • 2023-03-17
    • 2014-04-02
    • 2016-12-22
    • 2012-03-20
    • 2014-04-29
    • 2018-08-25
    相关资源
    最近更新 更多