Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android錄制視頻分段保存的探究

Android錄制視頻分段保存的探究

編輯:關於Android編程

錄制視頻需要分段保存,可以從系統源碼考慮,看了以下一些代碼:

framework/av/media/libstagefright/MPEG4Writer.cpp package/apps/Camera/src/com/android/camera/actor/VideoActor.java

主要從MPEG4Writer.cpp中的kMax32BitFileSize 和入手,如下,修改單個文件最大容量為56M(0x3800000),發現利用系統Camera錄像時,到達閥值後會提示“已達到大小上限”,並自動停止,保存已經錄制的視頻。

static const int64_t kMax32BitFileSize = 0x3800000;//0x00ffffffffLL; // 2^32-1 : max FAT32
static const int64_t kMax32BitDuration = 0x007fffffffLL;

然後追蹤到VideoActor的處理。有一個思路,就是停止的時候,進行文件保存後立即重新啟動錄像。

    public void stopVideoRecordingAsync() { // TChip ZJ
        // for snapshot
        stopObjectTracking();
        mStopVideoRecording = true;
        Log.d(TAG, "stopVideoRecordingAsync() mMediaRecorderRecording=" + mMediaRecorderRecording 
                + ", mRecorderBusy=" + mRecorderBusy 
                + ", isVideoProcessing()" + isVideoProcessing()
                + ", mStopVideoRecording =" + mStopVideoRecording);
        mVideoContext.getZoomManager().changeZoomForQuality();
        mVideoContext.setSwipingEnabled(true);
        mHandler.removeMessages(UPDATE_RECORD_TIME);
        mVideoContext.getShutterManager().setVideoShutterMask(false);
        if (isVideoProcessing()) {
            return;
        }
        if (mRecorderBusy) { // return for recorder is busy.
            return;
        }
        mRecorderBusy = true;
        mRecordingView.hide();
        if (mMediaRecorderRecording) {
            mVideoContext.getShutterManager().setVideoShutterEnabled(false);
            if (mStoppingAction != STOP_RETURN_UNVALID && mCallFromOnPause != true) {
               // mVideoContext.showProgress(mVideoContext.getResources().getString(R.string.saving)); // TChip ZJ : 去掉保存UI
            }
            mVideoSavingTask = new SavingTask();
            mVideoSavingTask.start();
        } else {
            mRecorderBusy = false;
            releaseRecorder();
            if (mStoppingAction == STOP_RETURN_UNVALID) {
                doReturnToCaller(false);
            }
        }
    }

先吃飯了,明天再看實現的可行性以及效果(是否漏秒)。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved