如何将 Android 和网站上的 Vimeo 与特定用户访问集成

问题描述

我们已经购买了一个用于视频流的 VIMEO 帐户。我们的网站和 Android 应用程序正在运行,用户级别的内容限制由 Firebase 生成的令牌管理。现在我想集成我们的网站和应用程序可以访问的 VIMEO 视频,并希望确保所需用户只能使用相应的令牌访问这些视频。

我们现在只是使用 iframe + 域级保护 + 将其设为私有,但有时可以下载它来显示我们网站上的视频。但无法管理不同的用户级别以仅访问不同的视频。还努力将其集成到 android 中以进行域级保护。是像硬编码的客户端令牌在应用程序上显示视频还是我必须使用 Vimeo 播放器或 API 以及如何使用?

看到了一些关于 android 的文档,但我似乎不清楚。请推荐

解决方法

我们通过 vimeo 的付费服务获得支持的经历真的很痛苦,他们针对特定或流行用例的文档非常不清楚。我确实设法实现了我的用例,但不确定这是否是最佳实践。我会尽可能详细地描述这次体验:

  1. 我们从 Vimeo Plus 转移到 Vimeo Pro 帐户(因为没有 Pro 帐户甚至没有人可以访问 vimeo GET api 或从 api 访问视频文件,这是必须的)
  2. 对于我们的网站用例,我们对 vimeo 隐藏了私人视频,只允许将其嵌入我们的网站(尽管如果有人检查网络,他可以在短时间内使用服务器响应 html 和有限的时间令牌)
  3. 对于 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();
        }
    });

现在我必须处理 Http to Https redict link in exoplayer 这是受限的 默认在 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);

如果您认为该方法可以更好,特别是关于 access_token.specific user access implementation,请在此主题中给我任何建议,我认为不可能完全可行。我可以在身份验证或从后端检查用户访问后发送链接。

但是仍然存在关于 Android 10 平台 (api 29) 的问题,该问题不允许在当前版本的 Vimeo Networking 库中使用有关“sslSocketFactory”的某些方法(导致作者:java.lang.IllegalStateException:无法在 Android10Platform 上提取信任管理器,sslSocketFactory 是类 com.android.org.conscrypt.OpenSSLSocketFactoryImpl),我将在另一篇文章中询问 (Vimeo Networking Library Crash for Android 10 platform (api29)) >

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...