在尝试加载之前,我如何判断YouTube视频是否可嵌入



我有一个无铬的YouTube播放器,我正在尝试将视频加载到其中,但只有一些视频有效,而不是全部。如果我没有记错的话,那些没有加载的是由于侵犯版权(例如,卡通的某一集没有加载,但一个孩子做后空翻的家庭电影加载了)。我想做的是找出这些视频是否可以加载,无论是在我们尝试加载之后还是之前。

举个例子,下面是Nataly Dawn的两个视频。一个加载,另一个不加载。

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

从工作视频和非工作视频的数据来看,我似乎看不出任何迹象表明后者是不可嵌入的。[我正在查找<yt:accessControl>标签或丢失的yt:format='5'(参见如何使用Youtube API检查视频是否可嵌入?),但无效。]

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

你提到的两个视频对我来说似乎都是可加载和可播放的。例如,使用:谷歌代码游乐场并将视频插入HTML的选项标签中。

不过这里有一些提示。

  • 在gdata请求中使用"v=2"参数以使用当前YT数据API
  • 这篇博客文章列出了一些额外的限制,你可能需要检查这些限制,以确定视频是可播放的还是可嵌入的
  • 有些视频可以嵌入,但不能播放。在这种情况下,您唯一能做的就是使用JavaScriptPlayerAPI来查找一个表明它正在播放的stateChange事件,然后使用setInterval通过getCurrentTime轮询视频,以确定它是否真的在播放。不过,对于大多数应用程序来说,这有点疯狂

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

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返回可嵌入的视频结果,请在请求中包含videoEmbeddable:"true"

相关内容

  • 没有找到相关文章

最新更新