web-dev-qa-db-fra.com

Quel format vidéo jouera sur tous les appareils Android Android?

Android peut lire un variété de formats vidéo , mais je dois choisir un format qui fonctionnera sur tous les appareils.

Tous les appareils Android 2.3 prennent-ils en charge exactement les mêmes formats? Par exemple, si le format est lu dans l'émulateur, cela signifie-t-il qu'il peut également être lu sur tout le matériel? Ou est-ce que différents appareils prennent en charge différents formats en fonction de quelles puces de décodeur ils ont?

S'ils sont tous identiques, le meilleur format est évidemment le H.264 à un débit et une résolution élevés. Sinon, quel est le meilleur codec/débit/résolution qui pourra être lu sur 90% des appareils? Google propose-t-il un moyen d'interroger les capacités vidéo de l'appareil et de choisir un format approprié?

23
Richard

L'émulateur est un mauvais test des codecs et n'est pas fonctionnel dans quelques domaines. Et oui, les fabricants d'appareils peuvent ajouter des codecs supplémentaires à leur version d'Android. Cependant, vous voudrez peut-être consulter Compatibilité Android et lire le document de définition de compatibilité pour plus de détails sur ce qui est requis par le fabricant, obtenez Android Market sur l'appareil. Malheureusement, un coup d'œil rapide ne dit rien sur le débit minimum, donc selon l'âge d'une version de Android que vous êtes prêt à soutenir, vous pouvez avoir des problèmes là-bas.

6
Morrison Chang

Après avoir testé sur de nombreux appareils (pour l'écran de démarrage vidéo d'une application très populaire). Mes recommandations sont:

video codec : H.264 
file format: .mp4
video bitrate: 256kbps
video frame/second: 24

Remarque: Ma vidéo n'a pas de son !!

Mais même avec cette recommandation, certaines vidéos ne fonctionneront pas en raison de sa résolution. Je crée donc un code délicat: j'incorpore toutes mes vidéos pour toute la densité dans mon dossier raw, j'ajoute un setOnErrorListener à mon VideoView et j'essaie de lancer une vidéo plus petite chaque fois qu'une erreur s'est produite.

Voici mon dossier brut:

raw/
   splashmdpi.mp4
   splashhdpi.mp4
   splashxhdpi.mp4

et voici mon Java:

int densityoffset = 0;
VideoView video = new VideoView(this);

video.setOnPreparedListener(new OnPreparedListener() {
             @Override
                 public void onPrepared(MediaPlayer mp) {
                    video.start();
                    }
 }

video.setOnErrorListener(new OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                densityoffset++;
                String suff = getDensitySuffix(getContext(), densityoffset);
                video.setVideoPath("Android.resource://com.example.packagename/raw/splash"+suff);
                if(offset>5)
                    return false;
                else


                    return true;
                }
            });

String suff = getDensitySuffix(this,offset);
video.setVideoPath("Android.resource://com.example.packagename/raw/splash"+suff);

private String suffix[]={"ldpi","mdpi","hdpi","xhdpi"};

/**
*Return the suffix concerning your device less offset value
**/
private String getDensitySuffix(Context ctx, int offset){
        int dens = 2;
        int d = getContext().getResources().getDisplayMetrics().densityDpi
        if(d==DisplayMetrics.DENSITY_LOW)
            dens = 0;
        else
            if(d==DisplayMetrics.DENSITY_MEDIUM)
                dens = 1;
            else
                if(d==DisplayMetrics.DENSITY_HIGH))
                    dens = 2;
                else
                    if(d==DisplayMetrics.DENSITY_XHIGH))
                        dens = 3;   
        return suffix[Math.max(0, dens-offset)];
    }
21
VinceFR

http://developer.Android.com/guide/appendix/media-formats.html

Je pense que vous pouvez utiliser la classe MediaPlayer pour voir des capacités spécifiques.

2
JoxTraex