簡體   English   中英

什么視頻格式將在所有Android設備上播放?

[英]What video format will play on all Android devices?

Android可以播放各種視頻格式 ,但我需要選擇一種適用於所有設備的格式。

所有Android 2.3設備都支持完全相同的格式嗎? 即如果格式將在模擬器中播放,這是否意味着它也將在所有硬件上播放? 或者不同的設備支持不同的格式,具體取決於它們具有哪些解碼芯片

如果它們完全相同,那么顯然最好的格式是高比特率和分辨率的H.264。 如果沒有,那么90%的設備上最好的編解碼器/比特率/分辨率是多少? 谷歌是否提供了一些查詢設備視頻功能和選擇合適格式的方法?

在很多設備上測試后(對於一個非常受歡迎的應用程序的視頻閃屏)。 我的建議是:

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

注意:我的視頻沒有聲音!!

但即使有了這個建議,一些視頻也無法解決問題。 所以我創建了一個棘手的代碼:我將所有視頻的所有視頻嵌入到我的raw文件夾中,在我的VideoView添加了一個setOnErrorListener ,並且每次發生錯誤時我都嘗試啟動一個較小的視頻。

這是我的原始文件夾:

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

仿真器對編解碼器的測試很差,並且在一些領域不起作用。 是的,設備制造商可能會為其Android版本添加額外的編解碼器。 但是,您可能需要查看Android兼容性並閱讀兼容性定義文檔,了解制造商在設備上獲取Android Market所需的更多詳細信息。 不幸的是,快速查看它並沒有說明最低比特率,所以根據您願意支持的Android版本的年齡可能存在問題。

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

我相信您可以使用MediaPlayer類來查看特定功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM