Question

Je vais avoir beaucoup de difficulté à mon application Android pour lire des vidéos de la carte SD. Peu importe la taille, le bitrate, le format vidéo, ou tout autre arrangement que je peux penser, ni l'émulateur ni mon G1 jouer tout ce que je tente de coder. J'ai aussi essayé un certain nombre de vidéos sur le Web (différents formats vidéo, bitrate, avec et sans pistes audio, etc.), et aucun de ceux qui travaillent soit.

Tout ce que je continue à recevoir est une boîte de dialogue qui dit:

"Impossible de lire la vidéo"

"Désolé, cette vidéo ne peut être lu."

Il y a des erreurs signalées dans LogCat, mais je ne les comprends pas et je l'ai essayé des recherches sur Internet pour obtenir des explications supplémentaires sans chance. Voir ci-dessous:

03-30 05:34:26.807: ERROR/QCOmxcore(51): OMXCORE API :  Free Handle 390d4
03-30 05:34:26.817: ERROR/QCOmxcore(51):  Unloading the dynamic library for OMX.qcom.video.decoder.avc
03-30 05:34:26.817: ERROR/PlayerDriver(51): Command PLAYER_PREPARE completed with an error or info PVMFErrNoResources
03-30 05:34:26.857: ERROR/MediaPlayer(14744): error (1, -15)03-30 05:34:26.867: ERROR/MediaPlayer(14744): Error (1,-15)

Parfois, je reçois aussi ceci:

03-30 05:49:49.267: ERROR/PlayerDriver(51): Command PLAYER_INIT completed with an error or info PVMFErrResource
03-30 05:49:49.267: ERROR/MediaPlayer(19049): error (1, -17)
03-30 05:49:49.347: ERROR/MediaPlayer(19049): Error (1,-17)

Voici le code que je utilise (dans ma méthode onCreate ()):

this.setContentView(R.layout.main);
//just a simple VideoView loading files from the SD card
VideoView myIntroView = (VideoView) this.findViewById(R.id.VideoView01);
MediaController mc = new MediaController(this);
myIntroView.setMediaController(mc);
myIntroView.setVideoPath("/sdcard/test.mp4");
myIntroView.requestFocus();
myIntroView.start();

S'il vous plaît aider!

Était-ce utile?

La solution

Ok, va ici. La vidéo que je travaille dans Adobe Premiere est censé être 480x800 (LxH), mais j'ai la sortie Adobe Media Encoder la séquence comme un « non compressé Microsoft AVI » en utilisant le codec vidéo « UYVY », 24fps frame rate, progressive , des pixels carrés, et de dimensions: 720x800 (lxh). Ce fichier fournit un assez grand avec 120px bordures noires de chaque côté du contenu vidéo. Je prends alors la vidéo dans Handbrake 0.9.4 et utiliser les paramètres suivants (j'ai commencé avec le régulière-> normal préréglé):

Container: MP4 File
Large file size: [un-Checked]
Web-optimized: [un-Checked]
iPod 5G support: [un-Checked]

Width: 320 (this is key, any higher than 320 and it won’t work)
Height: 528
Keep Aspect Ratio: [Checked]
Anamorphic: None

Crop Left: 120
Crop Right: 120

Everything under the "Video Filter" tab set to "Off"

Video Codec: H.264(x264)
Framerate: same as source
2-Pass Encoding: [Checked]
Turbo first pass: [un-Checked]
Avg Bitrate: 384

Create chapter markers: [un-Checked]

Reference Frames: 2
Mixed References: [un-Checked]
B-Frames: 0
Motion Estimation Method: Uneven Multi-Hexagon
Sub-pixel Motion Estimation: 9
Motion Estimation Range: 16
Analysis: Default
8x8 DCT: [un-Checked]
CABAC Entropy Coding: [un-Checked]
No Fast-P-Skip: [un-Checked]
No DCT-Decimate: [un-Checked]
Deblocking: Default, Default
Psychovisual Rate Distortion: [MAX]

Mon problème principal était que je tentais de sortir un fichier mp4 avec 480x800 (lxh) dimensions. Après avoir modifié la largeur à 320 (valeurs plus élevées ne fonctionnent pas), tout en gardant le rapport d'aspect correct, la sortie vidéo joue maintenant sans erreurs. J'espère que cela aide quelqu'un d'autre à un problème similaire.

Side note: Je souhaite que les restrictions vidéo Android étaient mieux documentés

.

Autres conseils

J'ai eu un peu de mal à obtenir de nombreuses vidéos à jouer sur mon téléphone (HTC Hero). jeu de mp4 512K standard (par exemple: http://www.archive.org/details/more_animation ), vérifiez avec eux pour vous assurer qu'il est pas votre code.

Voici mon code, de onCreate () dans un sous-activité qui ne joue que le fichier vidéo:




    protected VideoView mine;
    protected boolean done = false;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.videoshow);  
        mine = (VideoView) findViewById(R.id.video);   // Save the VideoView for touch event processing 
        try {
            String myURI = "/sdcard/" + path + "/v/" 
                          + currentItem.getFile() 
                          + "." + currentItem.getFileType();
            Uri video = Uri.parse(myURI); 
            mine.setVideoURI(video);
            mine.start();
            mine.setOnCompletionListener(new OnCompletionListener() {

                public void onCompletion(MediaPlayer mp) {  
                    result.putExtra("com.ejf.convincer01.Finished", true);
                    done = true;
                }
            });
        } catch (Exception ex) {
            Log.d(DEBUG_TAG, "Video failed: '" + ex + "'" );
        }

Je faisais face à ce problème jusqu'à ce que je compris que le problème était dans le répertoire de ma vidéo. Je gardais mes vidéos dans un répertoire qui est inaccessible à la vue vidéo. Donc, chaque fois que j'essaie de lire une vidéo, il me donne un message d'erreur indique: « Impossible de vidéo ouvert » ou quelque chose comme ça. Essayez et enregistrer votre vidéo dans ce répertoire qui sera également visible dans la galerie de téléphone.

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/" + "your app name ";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top