我正在使用MediaRecorder
录制带有音频的视频,但是当您使用Camera
拍摄照片时,可以将图像保存到Bitmap
并在保存前显示,我想要与视频相同 - 就像Snapchat一样,有办法吗?我不想保存视频,显示视频,然后可以选择删除或保留视频。
我正在使用此代码录制视频:
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/SelfieLightCamera/";
File dir = new File(path);
if (!dir.exists())
dir.mkdirs();
String myFile = path + "Video_" + System.currentTimeMillis() + ".mp4";
mediaRecorder = new MediaRecorder();
mCamera.unlock();
mediaRecorder.setCamera(mCamera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediaRecorder.setOutputFile(myFile);
try {
mediaRecorder.prepare();
} catch (IllegalStateException e) {
releaseMediaRecorder();
e.printStackTrace();
} catch (IOException e) {
releaseMediaRecorder();
e.printStackTrace();
}
mediaRecorder.start();
答案 0 :(得分:1)
Android应用程序很酷的一点是,您可以从手机中提取APK并反编译包以查看实际的Java代码。虽然它通常是混淆的(就像Snapchat的情况一样),但你仍然可以很好地了解应用程序的内部工作方式。
在研究Snapchat如何做到这一点时,我发现他们也像你一样使用MediaRecorder,但将文件保存到内部存储中。内部存储意味着该文件只能由持有该文件的应用程序访问。
以下是几行代码,让您对Snapchat在幕后做了大致的了解:
mediaRecorder.setCamera(ay$b.b());
mediaRecorder.setAudioSource(5);
if (z) {
mediaRecorder.setVideoSource(2);
} else {
mediaRecorder.setVideoSource(1);
}
mediaRecorder.setProfile(camcorderProfile);
mediaRecorder.setVideoSize(i, i2);
mediaRecorder.setMaxFileSize(bm.a());
mediaRecorder.setVideoEncodingBitRate(bm.a(camcorderProfile));
// Removed some code here…
mediaRecorder.setOrientationHint(this.f);
mediaRecorder.setMaxDuration(HttpService.DEFAULT_READ_TIMEOUT);
mediaRecorder.setOutputFile(this.a.toString());
if (this.c != null) {
mediaRecorder.setPreviewDisplay(this.c);
您应该做的是正常录制视频并将其保存到内部存储中。如果你想“保持”它,你只需将它移动到公共可用的外部存储。丢弃它意味着您只需将其从内部存储中删除。