如何在 Android 和具有特定用户访问权限的网站上集成 Vimeo
How to integrate Vimeo on Android and Website with specific user access
我们已经购买了一个用于视频流的 VIMEO 帐户。我们的网站和 android 应用程序是 运行,用户级别的内容限制由 firebase 生成的令牌管理。现在我想集成 VIMEO 视频以供我们的网站和应用程序访问,并希望确保这些视频只能由具有相应令牌的所需用户访问。
我们现在只是使用 iframe + 域级保护 + 将其设为私有(尽管有时可以下载)来显示我们网站上的视频。但无法管理不同的用户级别以仅访问不同的视频。还努力将其集成到 android 中以实现域级保护。在应用程序上显示视频是否像硬编码的客户端令牌,或者我必须使用 Vimeo 播放器或 API 以及如何?
看到了 android 的一些文档,但我似乎不清楚。请推荐
我们从 vimeo 获得付费服务的支持真是痛苦的经历,他们对特定或流行用例的文档非常不清楚。我确实设法实现了我的用例,但不确定它是否是最佳实践。我将尽可能详细地描述体验:
- 我们从 Vimeo Plus 转移到 Vimeo Pro 帐户(因为没有人甚至可以在没有 Pro 帐户的情况下获得 vimeo GET api 的访问权限或来自 api 的视频文件访问权限)
- 对于我们的网站用例,我们已经从 vimeo 中隐藏了私人视频,并且只允许它嵌入我们的网站(尽管如果有人检查网络,他可以使用服务器响应 html 有限短时间任何地方的时间令牌)
- 对于 Android 用例,因为它是无浏览器的,我们遵循 https://github.com/vimeo/vimeo-networking-java 并为此使用硬编码访问令牌并在 exoplayer 中播放(因为我稍后必须加密它或者我必须研发更多在使用 Oauth 播放视频时在有限时间内动态获取访问令牌。但问题是文档非常不清楚,甚至没有正确说明不同令牌的生命周期,只是说这取决于创建方式或范围)
编码:
confBuilder = new Configuration.Builder(accessToken);
// this access token has public+private+video file access created in the vimeo account manually
configuration = confBuilder.build();
VimeoClient.initialize(configuration);
VimeoClient.getInstance().fetchContent(url, CacheControl.FORCE_NETWORK, new ModelCallback<Video>(Video.class){
//here url should be like "videos/{video_id}" otherwise it wasn't working whatever the url was
@Override
public void success(Video video) {
//progressBar.setVisibility(View.GONE);
if(video != null){
Play play = video.getPlay();
if (play != null) {
//in my case "play" was null, but here I should get the direct link to varioud resolution files
VideoFile dashFile = play.getDashVideoFile();
String dashLink = dashFile.getLink();
// load link
VideoFile hlsFile = play.getHlsVideoFile();
String hlsLink = hlsFile.getLink();
// load link
ArrayList<VideoFile> progressiveFiles = play.getProgressiveVideoFiles();
String linkToMp4File = progressiveFiles.get(0).getLink();
//loadVideo();
}
//I got the link from here
ArrayList<VideoFile> videoFiles = video.files;
if(videoFiles != null && !videoFiles.isEmpty()) {
VideoFile videoFile = videoFiles.get(0); // you could sort these files by size, fps, width/height
String link = videoFile.getLink();
finalLink = link;
// load link
RunExoplayerPlayerWithThisLink();
// but this is http link which will redirect to https link which u have to handle in exoplayer
}
}
}
@Override
public void failure(VimeoError error) {
progressBar.setVisibility(View.GONE);
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
现在我必须在 exoplayer 中处理 Http to Https redict link 这是受限制的
默认情况下在 exoplayer 中。所以你必须在 DefaultHttpDataSourceFactory 中将“allowCrossProtocolRedirects”设置为“true”,这在 exoplayer 中播放视频时需要在 MediaSource 中使用:
DefaultHttpDataSourceFactory factory;
ExtractorsFactory extractorsFactory;
MediaSource mediaSource;
factory = new DefaultHttpDataSourceFactory("exoplayer_video",null, DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS,true);
extractorsFactory = new DefaultExtractorsFactory();
mediaSource = new ExtractorMediaSource(videoUri, factory, extractorsFactory,null,null);
如果您认为在access_token.specific 用户访问实现方面有更好的方法,请在本主题中给我任何建议,我认为不可能完全可行。我可以在身份验证或从后端检查用户访问后发送 link。
但是关于 Android 10 平台 (api 29) 仍然存在一个 问题,它不允许在当前版本的关于“sslSocketFactory”的 Vimeo 网络库(原因:java.lang.IllegalStateException:无法在 Android10Platform 上提取信任管理器,sslSocketFactory 是 class com.android.org.conscrypt.OpenSSLSocketFactoryImpl) 我会在另一个 post ()
中问
我们已经购买了一个用于视频流的 VIMEO 帐户。我们的网站和 android 应用程序是 运行,用户级别的内容限制由 firebase 生成的令牌管理。现在我想集成 VIMEO 视频以供我们的网站和应用程序访问,并希望确保这些视频只能由具有相应令牌的所需用户访问。
我们现在只是使用 iframe + 域级保护 + 将其设为私有(尽管有时可以下载)来显示我们网站上的视频。但无法管理不同的用户级别以仅访问不同的视频。还努力将其集成到 android 中以实现域级保护。在应用程序上显示视频是否像硬编码的客户端令牌,或者我必须使用 Vimeo 播放器或 API 以及如何?
看到了 android 的一些文档,但我似乎不清楚。请推荐
我们从 vimeo 获得付费服务的支持真是痛苦的经历,他们对特定或流行用例的文档非常不清楚。我确实设法实现了我的用例,但不确定它是否是最佳实践。我将尽可能详细地描述体验:
- 我们从 Vimeo Plus 转移到 Vimeo Pro 帐户(因为没有人甚至可以在没有 Pro 帐户的情况下获得 vimeo GET api 的访问权限或来自 api 的视频文件访问权限)
- 对于我们的网站用例,我们已经从 vimeo 中隐藏了私人视频,并且只允许它嵌入我们的网站(尽管如果有人检查网络,他可以使用服务器响应 html 有限短时间任何地方的时间令牌)
- 对于 Android 用例,因为它是无浏览器的,我们遵循 https://github.com/vimeo/vimeo-networking-java 并为此使用硬编码访问令牌并在 exoplayer 中播放(因为我稍后必须加密它或者我必须研发更多在使用 Oauth 播放视频时在有限时间内动态获取访问令牌。但问题是文档非常不清楚,甚至没有正确说明不同令牌的生命周期,只是说这取决于创建方式或范围)
编码:
confBuilder = new Configuration.Builder(accessToken);
// this access token has public+private+video file access created in the vimeo account manually
configuration = confBuilder.build();
VimeoClient.initialize(configuration);
VimeoClient.getInstance().fetchContent(url, CacheControl.FORCE_NETWORK, new ModelCallback<Video>(Video.class){
//here url should be like "videos/{video_id}" otherwise it wasn't working whatever the url was
@Override
public void success(Video video) {
//progressBar.setVisibility(View.GONE);
if(video != null){
Play play = video.getPlay();
if (play != null) {
//in my case "play" was null, but here I should get the direct link to varioud resolution files
VideoFile dashFile = play.getDashVideoFile();
String dashLink = dashFile.getLink();
// load link
VideoFile hlsFile = play.getHlsVideoFile();
String hlsLink = hlsFile.getLink();
// load link
ArrayList<VideoFile> progressiveFiles = play.getProgressiveVideoFiles();
String linkToMp4File = progressiveFiles.get(0).getLink();
//loadVideo();
}
//I got the link from here
ArrayList<VideoFile> videoFiles = video.files;
if(videoFiles != null && !videoFiles.isEmpty()) {
VideoFile videoFile = videoFiles.get(0); // you could sort these files by size, fps, width/height
String link = videoFile.getLink();
finalLink = link;
// load link
RunExoplayerPlayerWithThisLink();
// but this is http link which will redirect to https link which u have to handle in exoplayer
}
}
}
@Override
public void failure(VimeoError error) {
progressBar.setVisibility(View.GONE);
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
现在我必须在 exoplayer 中处理 Http to Https redict link 这是受限制的 默认情况下在 exoplayer 中。所以你必须在 DefaultHttpDataSourceFactory 中将“allowCrossProtocolRedirects”设置为“true”,这在 exoplayer 中播放视频时需要在 MediaSource 中使用:
DefaultHttpDataSourceFactory factory;
ExtractorsFactory extractorsFactory;
MediaSource mediaSource;
factory = new DefaultHttpDataSourceFactory("exoplayer_video",null, DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS,DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS,true);
extractorsFactory = new DefaultExtractorsFactory();
mediaSource = new ExtractorMediaSource(videoUri, factory, extractorsFactory,null,null);
如果您认为在access_token.specific 用户访问实现方面有更好的方法,请在本主题中给我任何建议,我认为不可能完全可行。我可以在身份验证或从后端检查用户访问后发送 link。
但是关于 Android 10 平台 (api 29) 仍然存在一个 问题,它不允许在当前版本的关于“sslSocketFactory”的 Vimeo 网络库(原因:java.lang.IllegalStateException:无法在 Android10Platform 上提取信任管理器,sslSocketFactory 是 class com.android.org.conscrypt.OpenSSLSocketFactoryImpl) 我会在另一个 post (