Comment lire les vidéos sur android à partir du dossier des actifs, brut ou dossier?
Je suis en train de lire une vidéo sur émulateur android
J'ai la vidéo dans mon dossier des actifs, ainsi que les premières dossier
Mais après avoir fait quelques recherches je ne peux pas lire la vidéo dans mon émulateur
je suis en train de travailler sur android 2.1
Ma vidéo est le format mp4, donc je ne pense pas que cela devrait être un problème
Quelqu'un pourrait-il me donner un exemple de code pour que je puisse comprendre un peu plus?
Le problème est que le VideoView que j'ai besoin d'afficher la Vidéo va prendre seulement un URI ou un chemin d'accès au Fichier de point à la Vidéo.
Si je enregistrer la vidéo dans les matières ou les actifs dossier je ne peux obtenir un flux d'entrée ou un descripteur de fichier et il semble que rien de ce qui peut être utilisé pour initialiser la VideoView.
Mise à jour
J'ai pris un peu plus près le MediaPlayer exemple et j'ai essayé de lancer un lecteur multimédia avec un FileDescriptor à l'actif des fichiers comme dans le code ci-dessous:
SurfaceView videoView = (SurfaceView) findViewById(gettingStarted)
SurfaceHolder holder = videoView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
final MediaPlayer player = new MediaPlayer();
player.setDisplay(holder);
player.setDataSource(getAssets().openFd(fileName).getFileDescriptor());
player.prepareAsync();
player.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
Maintenant, je reçois l'exception suivante:
java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed
Il semble qu'il n'y a pas d'autre chemin, puis copier le fichier de la carte sd au démarrage et qui semble un gaspillage de temps et de mémoire.
- Je pense que le problème est que le mp4 est un format compressé. Vérifier ma réponse pour plus de détails
- Ici l'explication au sujet de "brutes" floder stackoverflow.com/questions/11356601/...
Vous devez vous connecter pour publier un commentaire.
## Parfaitement de Travail depuis Android 1.6 ##
## Vérifier tutoriel complet ##
R.raw
chemin, vous devez mettre votre vidéo dans la "res/raw" du dossier et pas "actifs".où videocontainer de type videoview.
Essayer:
AssetFileDescriptor
version desetDataSource
a été ajouté dans l'API de niveau 24; OP est de demander quelque chose qui fonctionne sous android 2.3.PlayVideoActivity.java:
activity_play_video.xml:
Si je me souviens bien, j'ai eu le même genre de problème lors du chargement des trucs dans le fichier actif mais avec une base de données. Il semble que les choses dans votre fichier actif peut avoir 2 stats : compressé ou non.
S'il est compressé, alors vous êtes autorisé de 1 Mo de mémoire pour le décompresser, sinon vous aurez ce genre d'exception. Il y a plusieurs rapports de bogue à ce sujet, car la documentation n'est pas claire. Donc si vous voulez continuer à utiliser votre format, vous devez utiliser une version non compressée, ou de donner une extension telle que .mp3 ou .png de votre fichier. Je sais que c'est un peu fou, mais j'ai charger une base de données avec une .mp3 extension et il fonctionne parfaitement bien. Cette autre solution est de package de votre application avec une option spéciale pour lui dire de ne pas compresser certaine extension. Mais alors vous avez besoin pour construire votre application manuellement et ajouter des "zip -0" option.
L'avantage d'un non compressé assest est que la phase de zip-align avant la publication d'une application permettra d'aligner correctement les données, de sorte que lorsqu'il est chargé en mémoire, il peut être directement mappée.
Donc, des solutions :
Avez-vous essayer de mettre manuellement la Vidéo sur SDCard et essayer de jouer vidéo stocker sur la carte sd ?
Si ça fonctionne, vous pouvez trouver la façon de les copier à partir de matières de SDcard ici :
android-copie-rawfile-à-sdcard-video-mp4.
Je l'ai trouvé :
Personnellement Android trouvé la ressource, mais ne peut pas jouer pour l'instant. Mon fichier est un .m4v
Je pense que vous avez besoin de regarder cette -- il devrait avoir tout ce que vous voulez.
EDIT: Si vous ne voulez pas regarder le lien -- cela résume assez bien ce que vous souhaitez.
Mais je continue de recommander la lecture de l'information sur le lien.
https://gist.github.com/jrejaud/b5eb1b013c27a1f3ae5f
Ça sonne peut-être comme vous avez le même problème que moi. au lieu d'utiliser MP4, est 3GPP possible? je crois que j'ai utilisé comme Frein à main ou quelque chose comme le convertisseur de vidéo... vous devez juste vous assurer que vous avez le droit de l'encodeur, comme H. 264x ou quelque chose. désolé d'être un peu vague, il a été un moment. Aussi, si c'est possible, ne vous embêtez pas à vous soucier de android 2.1, et de plus, aussi, quelque chose, les choses ne fonctionnent PAS DANS l'ÉMULATEUR. donc, si il fonctionne sur un grand nombre de périphériques, puis il suffit de supposer qu'il fonctionne (surtout avec les différents manufacurers)
ici, vous pouvez lire mon problème et comment j'ai résolu le problème (après un long moment, et personne n'avait de réponse). je l'ai expliqué dans beaucoup plus de détails ici:
android media player ne fonctionne pas
Dans le
fileName
, vous devez mettre le chemin relatif du fichier (sans/asset
)par exemple:
Utiliser le
MediaPlayer
de l'API et de l'exemple de code.Mettre le fichier multimédia dans
raw
dossier.Obtenir le
file descriptor
pour le fichier.mediaplayer.setDataSource(fd,offset,length);
- ses troisl'argument du constructeur.
Puis quand
onPreared
,mediaplayer.start();
MainCode
XML