Android Camera 预览及录制视频 附demo
文章目錄
- 1. 打開Camera:
- 2. 連接預覽:
- 3. 啟動預覽:
- 4. 啟動視頻錄像:
- 4.1. 給Camera對象解鎖:
- 4.2. 配置MediaRecorder對象:
- 4.2.1. setCamera():
- 4.2.2. setAudiioSource():
- 4.2.3. setVideoSource():
- 4.2.4. 設置視頻的輸出格式和編碼:
- 4.2.4.I.setOutputFormat():
- 4.2.4.II. setAudioEncoder():
- 4.2.4.III.setVideoEncoder():
- 4.2.5. setOutputFile():
- 4.2.6. setPreviewDisplay():
- 警告:
- 4.3. 準備MediaRecorder對象:
- 4.4. 啟動MediaRecorder對象:
- 5. 停止視頻錄像:
- 5.1. 停止MediaRecorder對象:
- 5.2. 重置MediaRecorder對象:
- 5.3. 釋放MediaRecorder對象:
- 5.4. 鎖定Camera對象:
- 6. 停止預覽:
- 7. 釋放Camera對象:
- GitHub地址如下:
使用Android框架采集視頻需要認真的管理Camera對象,以及跟MediaRecorder類的協調。當使用Camera對象記錄視頻時,除了Camera.open()和Camera.release()方法的調用以外,還必須管理Camera.lock()和Camera.unlock()方法的調用,從而允許MediaRecorder對象訪問Camera硬件。
采集視頻需要一定的調用順序,必須按照一個特定執行順序來準備和采集視頻,詳細如下:
1. 打開Camera:
使用Camera.open()方法來獲得一個Camera對象的實例。
2. 連接預覽:
使用Camera.setPreviewDisplay()方法把SurfaceView跟Camera連接起來,準備一個實時的Camera圖像預覽界面。
設置預覽中demo設置的是圓形的預覽框,詳情可參考繪制圓形surfaceview
3. 啟動預覽:
調用Camera.starPreview()方法開始顯示實時的Camera圖像。
4. 啟動視頻錄像:
為了成功的記錄視頻,必須完成以下步驟。
4.1. 給Camera對象解鎖:
通過調用Camera.unlock()方法給由MediaRecorder對象使用的Camera對象解鎖。
4.2. 配置MediaRecorder對象:
在這一步中要調用以下MediaRecorder方法。更多信息,請看MediaRecorder參考文檔。
4.2.1. setCamera():
使用應用程序當前的Camera實例,把它設置成用于視頻采集;
4.2.2. setAudiioSource():
使用MediaRecorder.AudioSource.CAMCORDER,設置音頻源;
4.2.3. setVideoSource():
使用MediaRecorder.VideoSource.CAMERA來設置視頻源;
4.2.4. 設置視頻的輸出格式和編碼:
對于Android2.2以上的版本,要使用MediaRecorder.setProfile方法,并且要私用CamcorderProfile.get()方法來獲得一個Profile的示例。對于Android2.2以前的版本,必須要設置視頻輸出的格式和編碼參數:
4.2.4.I.setOutputFormat():
設置輸出格式,指定默認設置,或者是MediaRecorder.OutputFormat.MPEG_4;
4.2.4.II. setAudioEncoder():
設置聲音的編碼類型,指定默認設置,或者是MediaRecorder.AudioEncoder.AMR_NB;
4.2.4.III.setVideoEncoder():
設置視頻的編碼類型,指定默認設置,或者是MediaRecorder.VideoEncoder.MPEG_4_SP;
4.2.5. setOutputFile():
設置輸出文件,可以使用下文“保存媒體文件”中的示例代碼中的getOutputMediaFile(MEDIA_TYPE_VIDEO).toString()方法來獲取輸出文件路徑。
4.2.6. setPreviewDisplay():
給應用程序指定SurfaceView的預覽布局。要使用與連接預覽相同的對象。
警告:
這步中必須要調用MediaRecorder的配置方法,否則你的應用程序將會發生錯誤,并且錄像也會失敗。
4.3. 準備MediaRecorder對象:
通過調用MediaRecorder.prepare()方法,準備給MediaRecorder對象提供的配置設置。
4.4. 啟動MediaRecorder對象:
通過調用MediaRecorder.star()方法來記錄視頻。
5. 停止視頻錄像:
在這步中要調用以下方法來成功完成視頻記錄:
5.1. 停止MediaRecorder對象:
通過調用MediaRecorder.stop()方法來停止視頻采集
5.2. 重置MediaRecorder對象:
可選操作,通過調用MediaRecorder.reset()方法來刪除記錄器的配置設置。
5.3. 釋放MediaRecorder對象:
調用MediaRecorder.release()方法來釋放MediaRecorder對象。
5.4. 鎖定Camera對象:
調用Camera.lock()方法來鎖定Camera對象,以便MediaRecorder會話能夠繼續使用它。從Android4.0(API Level 14)開始,這個調用不再需要了,除非MediaRecorder.prepare()方法調用失敗。
6. 停止預覽:
當Activity使用完Camera對象時,要使用Camera.stopPreview()方法來停止預覽。
7. 釋放Camera對象:
調用Camera.release()方法來釋放Camera對象,以便其他應用程序能夠使用它。
提示:如果你的應用程序被用于典型的視頻記錄,那么在啟動預覽期間,把setRecordingHint(boolean)方法設置為true,這樣有助于減少啟動采集所需要的時間。
我的Demo寫的比較簡單,原本是想只當做圓形預覽框的分享,后干脆加個錄視頻和嘗試預覽幀的處理。
GitHub地址如下:
https://github.com/qunqunstyle/multithreading
注:點擊圓框可錄制,可切換前后相機,這個demo只是為了示意預覽幀onPreviewframe回調和錄制視頻的流程,在兩者的切換時可能會有異常。
總結
以上是生活随笔為你收集整理的Android Camera 预览及录制视频 附demo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机笔记检讨,上课没做笔记的反省检讨书
- 下一篇: nexus+4+android+6,An