web-dev-qa-db-ja.com

すべてのAndroidデバイスでどのビデオ形式が再生されますか?

Androidは さまざまなビデオ形式 を再生できますが、すべてのデバイスで機能する形式を1つ選択する必要があります。

すべてのAndroid 2.3デバイスはまったく同じ形式をサポートしていますか?つまり、その形式がエミュレーターで再生される場合、それはすべてのハードウェアでも再生されるということですか?彼らが持っているデコーダーチップは何ですか?

それらがすべて同じ場合、明らかに最高のフォーマットは高ビットレートと解像度のH.264です。そうでない場合、90%のデバイスで再生できる最高のコーデック/ビットレート/解像度は何ですか? Googleは、デバイスのビデオ機能を照会し、適切な形式を選択する方法を提供していますか?

23
Richard

エミュレーターはコーデックの不十分なテストであり、いくつかの領域では機能しません。また、デバイスメーカーは、Androidのビルドに追加のコーデックを追加できます。ただし、 Androidの互換性 を確認し、互換性定義ドキュメントを読んで、メーカーが必要とするものの詳細を確認してください。getAndroidデバイスの市場。残念ながら、クイックルックでは最小ビットレートについては何も記載されていないため、Androidのサポート対象のバージョンがどれだけ古いかによっては、問題が発生する可能性があります。

6
Morrison Chang

多くのデバイスでテストした後(非常に人気のあるアプリのビデオスプラッシュスクリーン用)。私の推奨事項は次のとおりです。

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

注:私のビデオには音がありません!!

しかし、この推奨事項を使用しても、一部のビデオは解像度のために機能しません。だから私はトリッキーなコードを作成します:rawフォルダーにすべての密度のすべてのビデオを埋め込み、setOnErrorListenerVideoViewに追加し、小さなビデオを起動しようとしますエラーが発生するたびに。

これは私の生のフォルダです:

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)];
    }
21
VinceFR

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

MediaPlayerクラスを使用して特定の機能を確認できると思います。

2
JoxTraex