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