Vimeo Networking Java Library와 통합하는 동안 비디오 파일 값 null을 가져와 URI로 비디오를 재생합니다.

Nov 23 2020

내가 사용 메오 네트워킹 라이브러리 하여 비디오 재생 내 안드로이드 응용 프로그램에서 비디오보기 메오의 공식 라이브러리를 useing에 의해.

토큰으로 API 인증

코드의 문제 는 videoFiles에 대해 null 값을 제공한다는 것 입니다. 코드 주석 사이에 아래에 언급 된 b 형식으로 링크를 제공하면

내 코드는 다음과 같습니다.

public class PlayActivity extends AppCompatActivity {

    VideoView videoView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play);

        videoView = findViewById(R.id.player);
// Getting access Token

        String accessToken = getString(R.string.access_token);
        Configuration.Builder configBuilder = new Configuration.Builder(accessToken)
                .enableCertPinning(false);
//Vimeo Client autenticated

        VimeoClient.initialize(configBuilder.build());
// the video uri; if you have a video, this is video.uri

어떤 URI를 전달해야하는지 모르겠으므로 URI를 2 형식으로 전달합니다.

ㅏ) https://player.vimeo.com/videos/123456789

실패 방법에서 오류가 발생합니다.

I / TAG5 : Vimeo 오류 : JsonReader.setLenient (true)를 사용하여 1 행 1 열 경로 $에서 잘못된 JSON을 허용합니다.

비) https://player.vimeo.com/videos/123456789/config

I / TAG1 : 비디오 : com.vimeo.networking.model.Video@0 I / TAG2 : VideoFiles null

그래서 마지막으로 링크 b를 사용합니다.

    final String uri = "https://player.vimeo.com/videos/123456789/config"; 
    GsonDeserializer gsonDeserializer = new GsonDeserializer();
    VimeoClient.getInstance().fetchNetworkContent(uri, new ModelCallback<Video>(Video.class) {
        @Override
        public void success(Video video) {
            Toast.makeText(PlayActivity.this, "Sucessful" + video, Toast.LENGTH_SHORT).show();
            Log.i("TAG1", "Video: " + video);


            ArrayList<VideoFile> videoFiles = video.files;
            Log.i("TAG2", "VideoFiles " + videoFiles);
// I am getting null Value of **videoFiles** and it's not passing the if block with link b above mentioned 

            if (videoFiles != null && !videoFiles.isEmpty()) {
                VideoFile videoFile = videoFiles.get(0); // you could sort these files by size, fps, width/height
                Log.i("TAG3", "VideoFiles " + videoFiles);
                String link = videoFile.getLink();
                Log.i("TAG4", "link " + link);
                // load link
                MediaController mediaController = new MediaController(PlayActivity.this);
                mediaController.setAnchorView(videoView);

                videoView.setVisibility(View.VISIBLE);
                videoView.setVideoURI(Uri.parse(link));
                videoView.setMediaController(null);
                videoView.requestFocus();
                videoView.start();
            }
        }

        @Override
        public void failure(VimeoError error) {

            Log.i("TAG5", "vimeo error  : " + error.getErrorMessage());
            Toast.makeText(PlayActivity.this, "failure due to " + error.getErrorMessage(), Toast.LENGTH_SHORT).show();

        }
    });
}
}

답변

AdityaAnand Nov 23 2020 at 12:41

방금 해결책을 얻었고 여기에 게시 할 생각이었습니다. 그래서 그것은 다른 사람을 도울 수 있습니다

대답은 간단하고, 내가 가지고 videoFile (TAG1) 및 링크 형식의 링크를 우회 (TAG2를)

https://api.vimeo.com/me/videos/123456789

따라서 최종 코드는 다음과 같습니다.

final String uri = "https://api.vimeo.com/me/videos/123456789";

이 대신

final String uri = "https://player.vimeo.com/videos/123456789/config"; 

다음은 Vimeo 네트워킹 라이브러리를 사용하여 Android 앱에서 비디오를 재생하는 데 도움이되는 완전한 코드입니다.

최종 코드 제시

public class PlayActivity extends AppCompatActivity {

VideoView videoView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_play);

    videoView = findViewById(R.id.player);
    // Getting access Token

    String accessToken = getString(R.string.access_token);
    Configuration.Builder configBuilder = new Configuration.Builder(accessToken)
            .enableCertPinning(false);
    //Vimeo Client autenticated

    VimeoClient.initialize(configBuilder.build());
    // the video uri; if you have a video, this is video.uri

    final String uri = "https://api.vimeo.com/me/videos/123456789"; 

    VimeoClient.getInstance().fetchNetworkContent(uri, new ModelCallback<Video>(Video.class) {
    
    @Override
    public void success(Video video) {
        Toast.makeText(PlayActivity.this, "Sucessful" + video, Toast.LENGTH_SHORT).show();
       
        ArrayList<VideoFile> videoFiles = video.files;
        Log.i("TAG1", "videoFiles " + videoFiles);
        if (videoFiles != null && !videoFiles.isEmpty()) {
            VideoFile videoFile = videoFiles.get(0); // you could sort these files by size, fps, width/height
            
            String link = videoFile.getLink();
            Log.i("TAG2", "link " + link);
            // load link
            // use the link to play the video by **EXO Player** or **Video View**
           // Start your video player here
           }
         }

    @Override
    public void failure(VimeoError error) {

        Log.i("TAG3", "vimeo error  : " + error.getErrorMessage());
        Toast.makeText(PlayActivity.this, "failure due to " + error.getErrorMessage(), Toast.LENGTH_SHORT).show();

       }
    });
    }
}