如何在android中录制mp4格式的低质量视频?
我正在从摄像机录制一段低质量的视频,并将其上传到服务器。问题是录制的视频采用3gp格式。即使我用mp4扩展路径给出额外的_输出标志,它仍然记录在3gp中 实际上,在iOS设备上,这个3gp视频没有播放,我不想使用ffmpeg将其转换为mp4,因为它有开销,转换需要时间 这是我正在使用的代码:-如何在android中录制mp4格式的低质量视频?,android,Android,我正在从摄像机录制一段低质量的视频,并将其上传到服务器。问题是录制的视频采用3gp格式。即使我用mp4扩展路径给出额外的_输出标志,它仍然记录在3gp中 实际上,在iOS设备上,这个3gp视频没有播放,我不想使用ffmpeg将其转换为mp4,因为它有开销,转换需要时间 这是我正在使用的代码:- ContentValues values = new ContentValues(); String fileName = System.currentTi
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格式或任何其他格式录制低质量视频?否
首先,对于说明特定的视频容器格式(例如MP4),没有关于操作\u视频\u捕获
的额外记录。尝试这样做的最佳方法是为文件传递一个Uri
,其中文件扩展名为.mp4
,但即使这样也只是一个希望
其次,有数千个摄像头应用程序宣传支持动作视频捕获
,包括数百个预装的摄像头应用程序。没有人会尊重你的额外成就。没有人需要注意文件扩展名来选择视频容器格式
如果您希望对视频录制进行一定程度的控制,请自己录制视频,例如使用
MediaRecorder
您可能需要更深入地了解使用相机的技巧:
创建一个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);
“但即使这只是一个希望”——我想知道这些答案是否合适@DanielWilson:这些是“为文件传递Uri,其中文件扩展名为.mp4”。没有要求任何应用程序注意该文件扩展名。在仔细查看后应该更具体。您对@PKV在第二个链接中的答案有何看法?这对我来说是合理的。(S) 他似乎从响应中的文件数据流创建了一个MP4:InputStream in=getContentResolver().openInputStream(data.getData()),我希望这与通过MediaStore.EXTRA请求intent中的MP4完全不同_OUTPUT@DanielWilson:这个答案更糟糕,因为很少有摄像头应用程序可以使用该代码。它也不能解决这个问题。您正在调用第三方相机应用程序。该应用的开发者可以随心所欲。这包括不实际录制视频,更不用说不以所需格式录制视频了。如果你需要以特定的格式录制视频,请自己录制。好吧,该死的。我理解第三方的意图可能是脆弱的,我们不能保证视频,但我想,如果我得到了一个视频,我至少可以在大多数情况下将视频转换为Mp4。我的选择似乎是使用该死的媒体录像机(我现在正在这么做,但它充满了奇怪的设备特定问题),或者可能在我们的服务器上转换文件。我会做更多的研究,谢谢你的时间:)