我想检测视频是否可以在Youtube外部播放。我目前正在检测侵犯版权、可嵌入和"辛迪加"限制。我调用了两次API,一次是在版本3,一次在版本2中,其中包括:
http://gdata.youtube.com/feeds/api/videos/{videoId}?v=2&alt=jsonc
https://www.googleapis.com/youtube/v3/videos?id={videoId}&key={key}&part=status
对于视频(https://www.youtube.com/watch?v=TzmyOT1kcfc),我得到了以下答案:
{
"kind": "youtube#videoListResponse",
"etag": ""kjEFmP90GvrCl8BObMQtGoRfgaQ/yoB7kT2xS4cnv1zDF-EiUrfidKQ"",
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
},
"items": [
{
"kind": "youtube#video",
"etag": ""kjEFmP90GvrCl8BObMQtGoRfgaQ/mk9sFeT7lpR0qthcrYeJssWlayY"",
"id": "TzmyOT1kcfc",
"status": {
"uploadStatus": "processed",
"privacyStatus": "public",
"license": "youtube",
"embeddable": true,
"publicStatsViewable": true
}
"player": {
"embedHtml": "<iframe type='text/html' src='http://www.youtube.com/embed/TzmyOT1kcfc' width='640' height='360' frameborder='0' allowfullscreen='true'/>"
}
}
]
}
和:
{
"apiVersion": "2.1",
"data": {
"id": "TzmyOT1kcfc",
"uploaded": "2014-08-07T11:13:03.000Z",
"updated": "2014-09-22T01:13:46.000Z",
"uploader": "topgear",
"category": "Autos",
"title": "Aston Martin: DBS vs DB9 and Vanquish (HQ) - Top Gear - Series 10 - BBC",
"description": "Jeremy test drives the flashy Aston Martin DBS. Clip taken from series 10, episode 6.nnSubscribe for more awesome Top Gear videos: http://www.youtube.com/subscription_center?add_user=TopgearnnTop Gear YouTube channel: http://www.youtube.com/topgearnTopGear.com website: http://www.topgear.comnnTop Gear Facebook: http://www.facebook.com/topgearnTop Gear Twitter: http://twitter.com/BBC_topgearnnThis is a channel from BBC Worldwide who help fund new BBC programmes.",
"thumbnail": {
"sqDefault": "http://i.ytimg.com/vi/TzmyOT1kcfc/default.jpg",
"hqDefault": "http://i.ytimg.com/vi/TzmyOT1kcfc/hqdefault.jpg"
},
"player": {
"default": "http://www.youtube.com/watch?v=TzmyOT1kcfc&feature=youtube_gdata_player",
"mobile": "http://m.youtube.com/details?v=TzmyOT1kcfc"
},
"content": {
"1": "rtsp://r6---sn-5hn7su7k.c.youtube.com/CiILENy73wIaGQn3cWQ9ObI5TxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp",
"5": "http://www.youtube.com/v/TzmyOT1kcfc?version=3&f=videos&app=youtube_gdata",
"6": "rtsp://r6---sn-5hn7su7k.c.youtube.com/CiILENy73wIaGQn3cWQ9ObI5TxMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp"
},
"duration": 438,
"aspectRatio": "widescreen",
"rating": 4.917057,
"likeCount": "2928",
"ratingCount": 2990,
"viewCount": 320436,
"favoriteCount": 0,
"commentCount": 143,
"accessControl": {
"comment": "allowed",
"commentVote": "allowed",
"videoRespond": "moderated",
"rate": "allowed",
"embed": "allowed",
"list": "allowed",
"autoPlay": "allowed",
"syndicate": "allowed"
}
}
}
因此,我看到的是,视频既"可聚合"(可在手机上观看)又可嵌入,但它是不可嵌入的(https://www.youtube.com/embed/TzmyOT1kcfc?autoplay=true===>刷新页面)。视频在我的Android应用程序中播放,因为我使用的是官方的Youtube SDK,所以我猜,对于谷歌来说,我的应用程序的这一部分是Youtube的一部分。
问题是:为什么在两个调用中,API都告诉我它是可嵌入的,而它绝对不是?
我发现,我可以在启动以"autoplay=true"为参数的嵌入式播放器返回的HTML中查找类"ytp error html5 stop propagation",但解析每个Youtube视频的HTML将非常昂贵。你有其他方法来确定视频是否真的可以嵌入吗?
最后一个问题:我点击了我为您提供的关于这个主题的嵌入式播放器,它第一次工作,但当您刷新页面时不工作。为什么?
是的,API确实将一些视频列为可嵌入的,而这些视频实际上并不是全面嵌入的。我相信诺曼·阿里的解释是准确的。因此,基于YouTube API的解决方案来满足我们的需求是不可能的。然而,有一种方法可以做到这一点,尽管很"技巧"。我最近注意到了这一点,我觉得对于那些正在寻找不需要启动嵌入式播放器的解决方案的人来说,这可能会派上用场。
首先陈述观察结果。。。我注意到,对YouTube嵌入链接请求的HTTP响应的内容,即"https://www.youtube.com/embed/VIDEO_ID'如果视频不可嵌入,则包含一个特定的元标记,而如果视频实际上是可嵌入的,则找不到该元标记:
<meta name="robots" content="noindex">
通过在响应中查找这个标签,可以过滤出API所说的可嵌入的视频,但这些视频对于我们的目的来说是不可嵌入的。与在客户端呈现的类"ytp error html5 stop propagation"不同,元标记用作服务器端HTML。这消除了启动嵌入式播放器的需要,我相信这会使该方法的成本降低一点。
一小部分视频的内容所有者对其应用了域级白名单或黑名单。这些限制并未反映在API的回复中你无能为力;这取决于视频的内容所有者来确定它们可以嵌入的位置