1. 程式人生 > >Android錄製小視訊(三)

Android錄製小視訊(三)

      之前的文章講到半屏錄製小視訊,不過微信不已經全屏了麼,我們的專案也要與時俱進不是。在仿微信全屏錄製的過程中,有兩點需要注意的地方:

     1.camera的預覽大小設定

     這個依然採取以前的策略,在支援的預覽大小中,選擇與當前螢幕寬高比最相近的一個preViewSize,保證surfaceView中畫面不會太失真。經過測試發現,手機支援的預覽尺寸裡還是有很接近螢幕寬高比的,這也可能是機子在設計之初就考慮到了全屏的情況了。

  

     2.錄製完結束後,使用mediaPlayer迴圈播放,直至使用者選擇確定按鈕。

     這裡需要注意的地方是,錄製結束後,要釋放資源,尤其是surfaceHolder。MediaRecorder與camer先後釋放出holder後,將其交給MediaPlayer,這樣就可以播放了。如果需要重新錄製,MediaPlayer釋放holder,camera獲取即可。

 /**
     * 停止錄製:異常返回false
     */
    public boolean stopRecorderVideo() {

        handler.removeCallbacks(mTimestampRunnable);
        endTime = System.currentTimeMillis();

        if (recorder == null || !isRunning) {
            return false;
        }

        try {
            //避免錄製過短崩潰
            recorder.setOnErrorListener(null);
            recorder.setPreviewDisplay(null);
            recorder.stop();
            recorder.reset();
            //釋放資源
            recorder.release();
            recorder = null;

            camera.stopPreview();
            camera.setPreviewDisplay(null);
            isRunning = false;

            iVideoRecorder.videoRecordStop(getVideoFilePath(), getVideoFileLongTime(), getVideoSyncFrame());


        } catch (Exception e) {
            e.printStackTrace();
            iVideoRecorder.videoRecordError();
            return false;
        }
        return true;
    }
 

        這裡需要注意的是:camera釋放holder時,需要停止預覽,否則有的手機會黑屏,無法交接holder了。


     另外在camera開發的過程中,容易報:Camera is being used after Camera.release(),需要在釋放資源前,surfaceHolder.removeCallback(this).如果camera設定了PreviewCallback,在釋放時,設定為空,以免報錯。