Obtenir la valeur null des fichiers vidéo lors de l'intégration avec la bibliothèque java Vimeo Networking, pour lire la vidéo par URI

Nov 23 2020

J'ai utilisé Vimeo Networking Library dans mon application Android pour lire la vidéo par Video View en utilisant la bibliothèque officielle de Vimeo.

J'authentifie l'API avec Token

Le problème avec le code est qu'il me donne la valeur nulle pour les videoFiles . Quand je donne le lien au format b mentionné ci-dessous entre le commentaire du code

Voici mon 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

Je ne sais pas quel URI je dois passer, donc je passe l'URI au format 2

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

Cela me jette l'erreur de la méthode d'échec

I / TAG5: Erreur Vimeo: utilisez JsonReader.setLenient (true) pour accepter un JSON malformé à la ligne 1, colonne 1 chemin $

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

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

Alors finalement j'utilise le lien 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();

        }
    });
}
}

Réponses

AdityaAnand Nov 23 2020 at 12:41

J'ai juste eu la solution, j'ai pensé la poster ici Donc ça peut aider d'autres

La réponse est simple, et j'ai obtenu le videoFile (TAG1) et le lien (TAG2) en contournant le lien dans ce format

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

Donc le code final sera comme ça

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

au lieu de cela

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

Voici mon code complet qui m'aide à lire la vidéo dans l'application Android en utilisant la bibliothèque réseau Vimeo

Présentation du code final

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

       }
    });
    }
}