錄制小視頻,一定要注意的參數

        mCamera.unlock();
        if (mMediaRecorder == null) {
            mMediaRecorder = new MediaRecorder();
            mMediaRecorder.setOrientationHint(90);
        }
        if (isCameraFrontFacing()) {
            mMediaRecorder.setOrientationHint(270);
        }

        // Step 1: Unlock and set camera to MediaRecorder
        mMediaRecorder.reset();
        mMediaRecorder.setCamera(mCamera);

        // Step 2: Set sources
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION);
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

        // Step 3: Set a Camera Parameters
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        /* Fixed video Size: 640 * 480*/
        mMediaRecorder.setVideoSize(optimalPicSize.width, optimalPicSize.height);
        /* Encoding bit rate: 1 * 1024 * 1024*/
        mMediaRecorder.setVideoEncodingBitRate((int) ((1.5) * 1024 * 1024));
        mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        mMediaRecorder.setAudioSamplingRate(44); // 設置音頻采樣率為44
        mMediaRecorder.setAudioEncodingBitRate(64); // 設置音頻比特率為64
        mMediaRecorder.setAudioChannels(1); // 設置錄制的音頻通道數

        // Step 4: Set output file
        mMediaRecorder.setOutputFile(savePath);
Step 1:
  1. setCamera參數能夠使得在預覽和錄制中快速切換,避免Camera對象的重新加載。在某些Android手機自帶的照相機程序中,切換預覽與錄制中的短暫卡頓,讀者可自行體會。
  2. mMediaRecorder.setOrientationHint(90)在錄制方向為豎直(portrait)時使用,它能使視頻文件的沿順時針方向旋轉90度,如果不設置此項,播放視頻時,畫面會發(fā)生90度的旋轉。不過這里更重要的是,即使設置了此項,在某些播放器上,畫面依然會有90度的旋轉(比如將在手機上正常播放的視頻導入到PC中進行播放,或者嵌入H5的video標簽中),這可是為什么呢?注意setOrientationHint的說明:Note that some video players may choose to ignore the compostion matrix in a video during playback. 那么如何做到在所有播放器上都能以正常方向播放呢?稍等,后續(xù)專門對其進行說明。
Step 2:
  1. setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION),VOICE_RECOGNITION相比于MIC會根據語音識別的需要做一些調諧,當然,這需要在系統(tǒng)支持的情況下。
  2. setVideoSource自然是VideoSource.CAMERA,只是在此兩項設置必須在設置編碼器之前設置,這無需說明。
Step 3:
  1. setOutputFormat需要在Step 2之后,并且在prepare()之前。這里采用OutputFormat.MPEG_4格式。
  2. setVideoSize需要權衡的因素較多,主要包括三方面:MediaRecorder支持的錄制尺寸、視頻文件的大小以及兼容不同Android機型。這里采用640 * 480(微信小視頻的尺寸是320*240),文件大小在500-1000kb之間,并且市面上99%以上機型支持此錄制尺寸。
  3. setVideoEncodingBitRate與視頻的清晰度有關,設置此參數需要權衡清晰度與文件大小的關系。太高,文件大不易傳輸;太低,文件清晰度低,識別率低。需要根據實際業(yè)務場景靈活調整。
  4. setVideoEncoder采用H264編碼,MPEG4、H263、H264等不同編碼的差別比較可參考http://blog.csdn.net/wcl0715/article/details/676137,實際使用中,H264的壓縮率較高,推薦使用。
  5. setAudioEncoder采用AudioEncoder.AAC,該設置主要是考慮其通用性、兼容性。
Step 4:
  1. setMaxFileSize指定錄制文件的大小限制,當然還可以限制其最大錄制時間。
  2. setOutputFile指定輸出視頻的路徑。
  3. setOnErrorListener指定錯誤監(jiān)聽器。
總結 :
  1. 代碼順序很重要,不按順序執(zhí)行代碼會拋異常
  2. setVideoEncodingBitRate 必須設置值,不設置值拍攝出來的視頻非常模糊
參考文檔 :

錄制視頻常見問題

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容