我正在从相机录制低质量视频并将其上传到服务器。问题是录制的视频是3gp格式。即使我给出带有mp4扩展路径的EXTRA_OUTPUT标志,它仍然以3gp记录。
实际上,在iOS设备上,这个3gp视频没有播放,我不想使用ffmpeg将其转换为mp4,因为它有开销,转换需要时间。
这是我正在使用的代码: -
ContentValues values = new ContentValues();
String fileName = System.currentTimeMillis() + ".mp4";
values.put(MediaStore.Video.Media.TITLE, fileName);
values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
try {
Uri videoUriFromCamera = getContentResolver().insert(
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUriFromCamera);
if (videoSize != -1)
intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, videoSize);
if (videoDuration != -1)
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, videoDuration);
startActivityForResult(intent, ACTION_REQUEST_VIDEO_FROM_CAMERA);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(VideoPickActivity.this, "SD-Card not available", Toast.LENGTH_LONG).show();
}
是否有任何方法或标志可以使用默认的相机意图以mp4格式或任何其他格式录制低质量视频?
答案 0 :(得分:1)
没有
首先,在ACTION_VIDEO_CAPTURE
上没有记录额外的用于声明特定视频容器格式(例如,MP4)的额外内容。尝试询问的最佳方法是为文件传递Uri
,文件扩展名为.mp4
,但即便如此也是如此。
其次,有数以千计的相机应用宣传支持ACTION_VIDEO_CAPTURE
,包括预装的数百个相机应用。没有人必须尊重你的任何额外内容。没有必要注意文件扩展名以选择视频容器格式。
如果您希望对视频录制实现这种程度的控制,请自行录制视频,例如使用MediaRecorder
。
答案 1 :(得分:0)
您可能需要更深入地了解使用相机的机制: 创建一个MediaRecorder,并设置一个CamcorderProfile,你可以设置一些技巧。
mCamera = Camera.open();
mRec = new MediaRecorder();
mRec.setCamera(mCamera);
mRec.setAudioSource(MediaRecorder.AudioSource.MIC);
mRec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
CamcorderProfile mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
mProfile.fileFormat = MediaRecorder.OutputFormat.MPEG_4;
mRec.setProfile(mProfile);