Какой видеоформат будет воспроизводиться на всех устройствах Android?

Android может воспроизводить различные видеоформаты , но мне нужно выбрать один формат, который будет работать на всех устройствах.

Все устройства Android 2.3 поддерживают одни и те же форматы? Т.е. если формат будет воспроизводиться в эмуляторе, означает ли это, что он также будет воспроизводиться на всех аппаратных средствах? Или разные устройства поддерживают разные форматы в зависимости от того, какие у них декодеры декодера?

Если они все одинаковые, то, очевидно, лучший формат – H.264 с высоким битрейтом и разрешением. Если нет, то каков наилучший кодер / бит / разрешение, который будет воспроизводиться на 90% устройств? Предоставляет ли Google какой-либо способ запроса возможностей видео устройства и выбора подходящего формата?

Solutions Collecting From Web of "Какой видеоформат будет воспроизводиться на всех устройствах Android?"

Эмулятор плохо тестирует кодеки и не работает в нескольких областях. И да производители устройств могут добавить дополнительные кодеки в свою версию Android. Однако вы можете проверить совместимость Android и прочитать документ определения совместимости для получения более подробной информации о том, что требуется изготовителю, чтобы получить Android Market на устройстве. К сожалению, быстрый просмотр в нем ничего не говорит о минимальном битрейте, поэтому в зависимости от того, сколько лет версия Android, которую вы готовы поддержать, может возникнуть там.

После тестирования на множестве устройств (для видеозахвата очень популярного приложения). Мои рекомендации:

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

Примечание. В моем видео нет звука!

Но даже с этой рекомендацией некоторые видео не будут работать из-за его разрешения. Поэтому я создаю хитрый код: я вставляю все свои видео для всей плотности в свою raw папку, добавляет setOnErrorListener в свой VideoView и я пытаюсь запускать меньшее видео каждый раз при возникновении ошибки.

Это моя сырая папка:

 raw/ splashmdpi.mp4 splashhdpi.mp4 splashxhdpi.mp4 

И это мой код 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)]; } 

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

Я считаю, что вы можете использовать класс MediaPlayer для просмотра конкретных возможностей.