我有一个无色的YouTube播放器,我正在尝试加载视频,但只有一些视频有效 - 不是全部。如果我没有弄错,那些没有加载的是由于版权侵权(例如,卡通的某些插曲没有加载,但是一个孩子做后空翻的家庭电影呢)。我要做的是要么在我们尝试加载它们之前或之前找出这些视频是否可以加载。
举个例子,这是Nataly Dawn的两个视频。一个加载,另一个不加载。
// loads and plays the video
ytplayer.loadVideoById("GhDGdT33K0k");
// doesn't load/play the video
ytplayer.loadVideoById("-KYUPJIzCyM");
通过查看the working video和non-working video的数据,我似乎无法看到任何表明后者不可嵌入的内容。 [我正在寻找<yt:accessControl>
代码或遗失yt:format='5'
(参见How do I use the Youtube API to check if a video is embeddable?),但无济于事。]
根据我在控制台中尝试的内容,loadVideoById
总是返回undefined
,无论视频是否实际加载。我似乎无法找到一种API方法来确定视频是否已经这样做了。
答案 0 :(得分:3)
您提到的两个视频似乎都可以加载并且可以播放。例如,使用:google code playground并将您的视频插入HTML的选项标记。
这里有一些提示。
stateChange
事件,然后使用setInterval
通过getCurrentTime
轮询视频找出它是否真的在玩。对于大多数应用程序来说,这有点疯狂。答案 1 :(得分:0)
现在您可以连接嵌入式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"