Android lecteur multimédia/VideoView erreur (1, -2147483648)
J'ai été d'avoir une incohérence avec la fixation d'un VideoView de la vidéo à partir d'un chemin d'accès au fichier.
VideoView myVideoView = findViewById(R.id.videoView);
...
myVideoView.setVideoPath(videoFilename);
...
myVideoView.start();
videoFilename est le chemin absolu d'une vidéo dans le cache de mon répertoire:
String videoFilename = new File(context.getCacheDir(), "myawesomevideo.mp4").getAbsolutePath();
Dans Android SDK >= 16 (Jelly Bean), cela fonctionne bien et mon génial de lecture de la vidéo. Dans Android 4.0.4 (SDK = 15), le lecteur multimédia des pauses lorsque myVideoView.start() est appelée.
L'erreur est toujours utile:
error (1, -2147483648)
Ce qui me manque ici? Chargement d'un fichier directement à partir de mon colis actifs (res/raw) ou internet (http://something.com/myawesomeinternetvideo.mp4), mais je ne peux pas comprendre comment lire les fichiers de mon répertoire de cache!
Vous devez vous connecter pour publier un commentaire.
Il s'avère que l'erreur de -2147483648 indique une erreur inconnue. Cela pourrait avoir quelque chose à voir avec l'encodage de la vidéo, mais il est également utile de vérifier que le chemin d'accès au fichier existe et que le VideoView a l'autorisation de le lire.
Mon problème était que j'écrivais mes fichiers avec le Contexte.MODE_PRIVATE (valeur par défaut).
Cela indique que seulement votre application peut accéder au fichier. Je ne sais pas précisément comment, ni pourquoi, mais en Jelly Bean et au-dessus, il semble que la vidéo est autorisé à accéder au fichier que vous spécifiez comme si c'était votre application, mais avant de Jelly Bean, la vidéo tente d'ouvrir le fichier dans son propre contexte (pas de votre application). Puisque la mode est privé, il échoue.
Une solution est d'écrire votre fichier avec Contexte.MODE_WORLD_READABLE, qui est maintenant obsolète. Cela indique que n'importe qui peut ouvrir le fichier chemin d'accès. C'est évidemment dangereux et déconseillé.
J'ai fini par la création d'un fournisseur de contenu et de ma propre URI pour gérer ce cas. Plus précisément:
AndroidManfest.xml:
VideoProvider.java:
Et puis, où j'ai accès à mes fichiers vidéo:
C'est une très longue haleine façon de raconter l'VideoView de demander à votre ContentProvider pour le descripteur de fichier pour les données. Les descripteurs de fichier ne sont pas autorisées, de sorte que vous ouvrez le fichier à l'aide de votre application, des autorisations et de la remettre pour le VideoView plutôt que de demander à l'VideoView pour ouvrir le fichier à l'aide de ses propres autorisations.
Cela résout mon problème et j'espère le vôtre, aussi!
Error (1,-2147483648)
. J'ai essayé .3gp et .mp4 vidéos, mais il me donne la même erreur dans les émulateurs. Que dois-je faire pour résoudre ce problème, merci de me guider. Cette erreur est vraiment vague, je ne reçois pas quoi faire maintenant.E/ActivityThread﹕ Failed to find provider info for com.example.dotweb.imageproject.VideoProvider.files.files E/MediaPlayer﹕ Unable to create media player
J'ai aussi eu ce problème lors du chargement d'un fichier vidéo à partir du cache de répertoire. Le problème semble survenir sur Nexus-appareils seulement, mais je coundn pas le tester sur beaucoup d'appareils.
J'ai essayé d'écrire le fichier avec le Contexte.MODE_WORLD_READABLE mais que ce correctif ne fonctionne pas pour moi. L'VideoProvider.java aussi ne l'est pas.
J'ai donc trouvé une autre solution qui a fonctionné pour moi. J'ai créé un fichier temporaire dans mon Activité et a donné le VideoView l'absolut chemin.
Peut-être que mon code peut aider quelqu'un 🙂