Android 获取视频格式

在Android开发中,有时候我们需要获取视频文件的格式信息,比如视频的编码格式、分辨率等。本文将介绍如何在Android应用中获取视频文件的格式信息,并附上代码示例。

1. 获取视频文件信息

我们可以使用MediaMetadataRetriever类来获取视频文件的信息。以下是一个简单的代码示例,演示如何获取视频文件的编码格式和分辨率信息。

MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(filePath);

String duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
String width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
String height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
String rotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
String format = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE);

retriever.release();
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

上面的代码中,我们首先创建一个MediaMetadataRetriever对象,然后设置视频文件的路径。接着使用extractMetadata方法可以获取视频的各种信息,比如视频时长、宽高、旋转角度和格式。

2. 示例应用

为了更好地演示如何获取视频文件的格式信息,我们可以创建一个简单的Android应用。用户可以选择一个视频文件,应用会显示该视频文件的格式信息。

下面是一个简单的示例应用的代码:

public class MainActivity extends AppCompatActivity {
    private static final int REQUEST_PICK_VIDEO = 1;
    private TextView tvResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvResult = findViewById(R.id.tv_result);

        Button btnSelectVideo = findViewById(R.id.btn_select_video);
        btnSelectVideo.setOnClickListener(view -> {
            Intent intent = new Intent();
            intent.setType("video/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Video"), REQUEST_PICK_VIDEO);
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == REQUEST_PICK_VIDEO && resultCode == RESULT_OK && data != null) {
            Uri videoUri = data.getData();
            String videoPath = getRealPathFromURI(videoUri);

            if (videoPath != null) {
                getVideoInfo(videoPath);
            }
        }
    }

    private String getRealPathFromURI(Uri contentUri) {
        String[] proj = {MediaStore.Video.Media.DATA};
        Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
        
        if (cursor != null && cursor.moveToFirst()) {
            int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
            String path = cursor.getString(columnIndex);
            cursor.close();
            return path;
        }
        
        return null;
    }

    private void getVideoInfo(String filePath) {
        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        retriever.setDataSource(filePath);

        String duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
        String width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH);
        String height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT);
        String rotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
        String format = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE);

        retriever.release();

        String result = "Duration: " + duration + "ms\n"
                + "Resolution: " + width + "x" + height + "\n"
                + "Rotation: " + rotation + "\n"
                + "Format: " + format;

        tvResult.setText(result);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.

在上面的代码中,我们首先通过Intent选择视频文件,然后获取视频文件的路径。接着调用getVideoInfo方法获取视频文件的信息,并将结果显示在TextView上。

3. 总结

通过以上内容,我们学习了如何在Android应用中获取视频文件的格式信息。通过MediaMetadataRetriever类,我们可以轻松地获取视频文件的编码格式、分辨率等信息,为应用开发提供了便利。

希望本文能帮助你更好地了解Android开发中获取视频格式的方法。祝你编程愉快!