[英]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.