2016-07-23 52 views
0

我正在使用MediaRecorder錄製帶有音頻的視頻,但是當您使用Camera拍攝照片時,可以將圖像保存到Bitmap並在保存前顯示它,我想對視頻進行同樣處理Snapchat有,有沒有辦法?我不想保存視頻,顯示它,然後可以選擇刪除或保留視頻。保存之前的Android媒體錄製器預覽

我使用此代碼,以錄製視頻:

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

很酷的事情有關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); 

你應該做的是正常錄製視頻並保存到內部存儲。如果您想「保留」它,您只需將其移動到公開可用的外部存儲。拋棄它意味着你只是從內部存儲中刪除它。

+0

好吧,逆向工程是偉大的:) – DAVIDBALAS1

+0

我有麻煩從內部存儲(以顯示它)... – DAVIDBALAS1

+0

讀取文件@ DAVIDBALAS1退房[Android的存儲文件(https://developer.android。 com/guide/topics/data/data-storage.html#filesInternal)獲取更多幫助。它應該非常簡單。讓我知道你是否仍然無法工作。 – hankide