Youtube视频无法嵌入,但API表示可以。

7

我希望能够检测除了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'/>"
            }
        }
    ]
}

And :

{
    "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.\n\nSubscribe for more awesome Top Gear videos: http://www.youtube.com/subscription_center?add_user=Topgear\n\nTop Gear YouTube channel: http://www.youtube.com/topgear\nTopGear.com website: http://www.topgear.com\n\nTop Gear Facebook: http://www.facebook.com/topgear\nTop Gear Twitter: http://twitter.com/BBC_topgear\n\nThis 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,所以我猜对于Google来说,我的应用程序的这个部分是Youtube的一部分。
问题是:为什么在两个调用中,API告诉我它是可嵌入的,而实际上它不是呢?
我发现,我可以在带有“autoplay = true”参数的嵌入式播放器中启动时在HTML中查找类“ytp-error html5-stop-propagation”,但每个Youtube视频解析HTML将非常昂贵。你有其他方法找出一个视频是否真的可以嵌入吗?
最后一个问题:我点击我在这个话题中提供给你的嵌入式播放器,第一次它能够正常工作,但刷新页面后却无法工作了。为什么?
2个回答

0

是的,API确实会将一些视频列为可嵌入,但实际上它们并不能在全网嵌入。我相信Nauman Ali的解释是准确的。因此,基于YouTube API的解决方案对我们来说是行不通的。然而,有一种方法-虽然有点“hacky”-可以做到这一点。我最近注意到了这一点,我觉得这可能对那些寻找不需要启动嵌入式播放器的解决方案的人很有用。

首先说明观察结果... 我注意到,在请求YouTube嵌入链接(即'https://www.youtube.com/embed/VIDEO_ID')的HTTP响应的内容中,如果视频不可嵌入,则包含一个特定的meta标签,而如果视频实际上是可嵌入的,则不会找到该meta标签:

<meta name="robots" content="noindex">

通过在响应中查找此标记,可以过滤掉API说可以嵌入但实际上不能嵌入的视频。与在客户端呈现的“ytp-error html5-stop-propagation”类不同,元标记作为服务器端HTML提供。这消除了启动嵌入式播放器的需要,使该方法稍微不那么昂贵,我相信。

-1

一些视频由其内容所有者应用了域级白名单或黑名单。这些限制在API响应中不会反映出来。 你无能为力,视频的内容所有者决定它们可以嵌入到哪里。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接