在网络应用程序和移动应用程序中嵌入私人 Vimeo 视频 -- Ionic/Angular

Embed private Vimeo videos in both a web app AND mobile apps -- Ionic/Angular

我遇到的情况是,我们既是包含私人视频的 Vimeo 专业帐户的所有者,又是我们嵌入这些视频的 Ionic/Angular 应用程序的开发者。

因为我们不希望任何人都能够将这些视频嵌入任何地方...在部署到我们的网络应用程序时,我可以简单地 select 我们的 Vimeo 帐户中的选项 "only embed these videos on specific domains" 并提供我们的网络应用程序的域。这工作得很好。

部署到 iOS/Android 时,我没有要添加到 "whitelist" 的特定域,因此我们在嵌入这些视频的应用程序中收到错误消息"Sorry, because of its privacy settings, this video cannot be displayed here."

的效果

我的问题是在阅读了 Vimeo 文档并在网上进行了全面搜索之后,我似乎找不到任何关于这种特定情况的示例。

我似乎不需要整个 OAuth,因为我并不是真的要求我的用户使用他们自己的 Vimeo 帐户或让我们访问他们帐户上的任何内容。

我只是希望能够将我们的视频在 Vimeo 上保密,但也能够以某种方式将它们嵌入我们的网络和移动应用程序中。

在这里走什么路比较合适?我愿意接受任何和所有的建议。就目前而言,我暂时将我们的视频设置回 "embed anywhere" 以使其适用于我们现有的用户,但我真的希望能够将其设置回仅特定域,然后找出移动端还有。

感谢您的帮助或指导!

编辑:我应该说我到目前为止最接近的是这个页面上的这个小片段:https://developer.vimeo.com/api/authentication 它说...

"NOTE: If you want to embed your own videos on your own website (and only use Vimeo for transcoding and hosting services), you do not need to use the API to authenticate your application. All you need to do is generate a new token from your app page and include it in your application. This is a special case in which you are both the end user and the application owner. And because you're special, you can skip the rest of this document."

这似乎正是我想要的,但实际上并没有关于如何做到这一点的进一步说明。

如果您只需要将视频嵌入到网站中,您可以在 Vimeo 上将视频设为私有并通过转到 https://vimeo.com/settings/videos/upload_defaults 授权视频嵌入到您的网站中,设置 "Where can your videos be embedded?" 选项添加到 "Only sites I choose",然后使用 "Add domain" 按钮添加您网站的域。

这适用于网站,但不适用于应用程序(除非您的应用程序包含指向您网站页面的网络视图或 iframe,而不是实际嵌入到您的应用程序中的视频)。在这种情况下,一个可能的解决方案是使用视频设置中的分发选项 (https://vimeo.com/manage/{assetID}/distribution)。在页面底部附近,您会找到一个 "Video file links" 部分,该部分将为您提供用于下载或流式传输视频的链接。这些是指向实际视频的链接,因此无法像通常的嵌入代码链接一样进行控制,因此请注意何时何地使用它们。

如果您确实需要拨打 API 电话,我自己遇到了一些问题,因此只能提供有限的帮助。目前我可以对 Vimeo 的 API 端点进行 API 调用(下面包含 PHP 示例),提供我的访问令牌,并获得包含所请求信息的结果,但是 仅当我使用的访问令牌是我不久前为旧应用程序生成的访问令牌时。 我生成的任何新访问令牌(无论是在我帐户中的新应用程序还是旧应用程序中,都不会似乎无关紧要)将不起作用。这同样适用于使用 Vimeo 网站上概述的 OAuth 2.0 流程检索的任何访问令牌。非常沮丧...

似乎 Vimeo 建议的所有 OAuth 2.0 API 工作流程都是为了授予开发人员访问最终用户视频的权限,而不是授予最终用户访问开发人员视频的权限。

    $albumsVideosURL = "https://api.vimeo.com/users/$userID/albums/$albumID/videos?&per_page=2";

    $headers = array( 
        "Content-type: application/json", 
        "Accept: application/vnd.vimeo.*+json;version=3.4", 
        "Authorization: Bearer " . $access_token,
        "scope: public private video_files",
    );

    $ch = curl_init($albumsVideosURL);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);  
    $data = curl_exec($ch);
    curl_close($ch);

编辑:

我终于成功了!而且无需安装 Vimeo 的 PHP SDK 库!

归结为身份验证类型!我一直在尝试BasicOauth,但需要设置为Bearer!我已经编辑了上面示例中的 PHP 代码以反映我当前的理解,我将在下面包含一个 JavaScript 示例。看起来您也不需要在 header 中包含内容类型、接受或范围。您真正需要的只是身份验证,并且身份验证必须设置为 Bearer。

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        var output = this.responseText;
        console.log(output);
    }
};
xmlhttp.open("GET", endpoint, true);
xmlhttp.setRequestHeader("Authorization", "Bearer " + access_token);
xmlhttp.send();

我真的希望 Vimeo 支持技术刚刚打开,而不是反复告诉我设置设置 header 而不告诉我要使用什么类型...哦,好吧,最后到了那里.