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