保存前Android Media Recorder预览

时间:2016-07-23 23:00:27

标签: android

我正在使用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();

1 个答案:

答案 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);

您应该做的是正常录制视频并将其保存到内部存储中。如果你想“保持”它,你只需将它移动到公共可用的外部存储。丢弃它意味着您只需将其从内部存储中删除。