简体   繁体   English

视频持续时间长于录制时间 - Android Studio

[英]Video duration is longer than recorded - Android Studio

I'm new to Android programing and I found a way for recording a video in my app.我是 Android 编程的新手,我找到了一种在我的应用程序中录制视频的方法。

It seems a bit odd that I recorded a video of 10 second but when I'm getting its duration the length is 67818 second 😵我录制了一个 10 秒的视频似乎有点奇怪,但是当我得到它的持续时间时,长度是 67818 秒😵

This is my code for starting a video capturing:这是我开始视频捕获的代码:

public class UserViewActivity extends AppCompatActivity {
    private static final String TAG = "UserViewActivity";
    private static final int CAMERA_PERMISSION_CODE = 100;

    private Button btn;
    private Uri videoUri;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_view);

        btn = findViewById(R.id.recordBtn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                recordVideo();
            }
        });
    }

    ActivityResultLauncher<Intent> videoRecordActivityLauncher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult result) {
                    if (result.getResultCode() == RESULT_OK) {
                        Intent intent = result.getData();
                        if (intent != null) {
                            videoUri = intent.getData();
                            MediaPlayer mp = MediaPlayer.create(UserViewActivity.this, videoUri);
                            int duration = mp.getDuration(); // The value here is 67818633 millisecons for 10 second video
                            mp.release();
                            Log.i(TAG, "Video is recorded and available at path " + videoUri + " with duration of " + duration);
                        }
                    } else if (result.getResultCode() == RESULT_CANCELED) {
                        Log.i(TAG, "Recording video is canceled");
                    } else {
                        Log.w(TAG, "Recording video got some error");
                        Log.w(TAG, "onActivityResult not supported: " + result.getResultCode());
                    }
                }
            }
    );

    private void recordVideo() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, CAMERA_PERMISSION_CODE);
        }
        @SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmm");
        String videoFileName = "recordingVideo_" + sdf.format(System.currentTimeMillis());
        File storageDir = getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File videoFile = new File(storageDir + "/" + videoFileName);
        Uri videoUriForAddingCaptureVideo = FileProvider.getUriForFile(UserViewActivity.this,
                getPackageName() + ".provider",
                videoFile);
        Intent intent = new Intent((MediaStore.ACTION_VIDEO_CAPTURE));
        intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUriForAddingCaptureVideo);
        videoRecordActivityLauncher.launch(intent);
    }
}

Can anyone know why and how to fix it?谁能知道为什么以及如何解决它?

Thanks!谢谢!

You can convert duration in valid time by doing this -您可以通过执行此操作将持续时间转换为有效时间 -

getDuration() returns Milliseconds getDuration()返回Milliseconds

int duration = mediaPlayer.getDuration();
String validDuration = String.format("%02d min, %02d sec", 
    TimeUnit.MILLISECONDS.toMinutes(duration),
    TimeUnit.MILLISECONDS.toSeconds(duration) - 
    TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(duration))
);

then you can use it where ever you want for example you use it on your textview like this :然后你可以在任何你想要的地方使用它,例如你在你的 textview 上使用它,如下所示:

durationTv.setText(validDuration);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM