我有一个无铬的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"