Das Abrufen von Videodateien mit dem Wert null während der Integration in die Java-Bibliothek von Vimeo Networking ermöglicht die Wiedergabe des Videos über URI

Nov 23 2020

Ich habe die Vimeo Networking Library in meiner Android-App verwendet, um das Video per Video View unter Verwendung der offiziellen Bibliothek von Vimeo abzuspielen.

Ich authentifiziere die API mit Token

Das Problem mit dem Code ist, dass er mir den Nullwert für die Videodateien gibt . Wenn ich den unten erwähnten Link im b- Format zwischen den Codekommentaren gebe

Hier ist mein Code

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

Ich weiß nicht, welchen URI ich übergeben soll, also übergebe ich den URI im 2-Format

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

Es wirft mir den Fehler von der Fehlermethode

I / TAG5: Vimeo-Fehler: Verwenden Sie JsonReader.setLenient (true), um fehlerhaften JSON in Zeile 1, Spalte 1, Pfad $ zu akzeptieren

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

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

Also benutze ich endlich Link 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();

        }
    });
}
}

Antworten

AdityaAnand Nov 23 2020 at 12:41

Ich habe gerade die Lösung bekommen und dachte daran, sie hier zu veröffentlichen. So kann es anderen helfen

Die Antwort ist unkompliziert, und ich habe die Videodatei (TAG1) und den Link (TAG2) erhalten, die den Link in diesem Format umgehen

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

Der endgültige Code wird also so sein

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

an Stelle von

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

Hier ist mein vollständiger Code, mit dem ich das Video in der Android App mithilfe der Vimeo-Netzwerkbibliothek abspielen kann

Präsentation des endgültigen Codes

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();

       }
    });
    }
}