Androidは さまざまなビデオ形式 を再生できますが、すべてのデバイスで機能する形式を1つ選択する必要があります。
すべてのAndroid 2.3デバイスはまったく同じ形式をサポートしていますか?つまり、その形式がエミュレーターで再生される場合、それはすべてのハードウェアでも再生されるということですか?彼らが持っているデコーダーチップは何ですか?
それらがすべて同じ場合、明らかに最高のフォーマットは高ビットレートと解像度のH.264です。そうでない場合、90%のデバイスで再生できる最高のコーデック/ビットレート/解像度は何ですか? Googleは、デバイスのビデオ機能を照会し、適切な形式を選択する方法を提供していますか?
エミュレーターはコーデックの不十分なテストであり、いくつかの領域では機能しません。また、デバイスメーカーは、Androidのビルドに追加のコーデックを追加できます。ただし、 Androidの互換性 を確認し、互換性定義ドキュメントを読んで、メーカーが必要とするものの詳細を確認してください。getAndroidデバイスの市場。残念ながら、クイックルックでは最小ビットレートについては何も記載されていないため、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クラスを使用して特定の機能を確認できると思います。