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