亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android使用MediaRecorder類進行錄制視頻

2020-04-11 11:20:27
字體:
來源:轉載
供稿:網友

武林網提醒大家使用MediaRecorder錄音錄像的設置代碼步驟一定要按照API指定的順序來設置,否則報錯

步驟為:

1、設置視頻源,音頻源,即輸入源

2、設置輸出格式

3、設置音視頻的編碼格式

一、首先看布局文件,這里有一個SurfaceView,這是一個繪制容器,可以直接從內存或者DMA等硬件接口取得圖像數據,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:tools="http://schemas.android.com/tools"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical"        tools:context="com.xqx.mediarecorder.app.WorkRecorder">    <!-- 開始錄制按鈕 -->    <Button        android:id="@+id/startRecord"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:onClick="btnStartRecord"        android:text="開始錄制"        />    <Button        android:id="@+id/stopRecord"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:onClick="btnStopRecord"        android:text="停止錄制"        />    <SurfaceView        android:id="@+id/surView"        android:layout_width="match_parent"        android:layout_height="match_parent"/></LinearLayout>

二、Activity 代碼

1、首先看下成員變量

 // 開始錄制,停止錄制按鈕  private Button startRecord,stopRecord;  // 顯示預覽的SurfaceView  private SurfaceView surfaceView;  // 標記,判斷當前是否正在錄制  boolean isRunning = false;  // 錄制類  private MediaRecorder recorder;  // 存儲文件  private File saveFile;

2、onCreate()方法中進行一些初始化

     startRecord = (Button) findViewById(R.id.startRecord);
        stopRecord = (Button) findViewById(R.id.stopRecord);
        surfaceView = (SurfaceView) findViewById(R.id.surView);
        // onCreate()初始化 ,一開始肯定沒有開始錄制,所以停止按鈕不可點擊
        stopRecord.setEnabled(false);
     // 設置Surface不需要維護自己的緩沖區
        surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        // 設置分辨率
        surfaceView.getHolder().setFixedSize(320, 280);
        // 設置該組件不會讓屏幕自動關閉
        surfaceView.getHolder().setKeepScreenOn(true);

3、現在看“開始錄制”監聽事件

----3.1

 創建MediaRecorder對象  recorder = new MediaRecorder();  recorder.reset();

----3.2 設置三步,順序固定

//1.設置采集聲音recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//設置采集圖像recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//2.設置視頻,音頻的輸出格式recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//3.設置音頻的編碼格式recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);//設置圖像的編碼格式recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);

----3.3 其他可選設置,更多請查看API

//設置立體聲recorder.setAudioChannels(2);//設置最大錄像時間 單位:毫秒recorder.setMaxDuration(600000);//設置最大錄制的大小 單位,字節recorder.setMaxFileSize(1024*1024);//音頻一秒鐘包含多少數據位recorder.setAudioEncodingBitRate(128);//設置選擇角度,順時針方向,因為默認是逆向90度的,這樣圖像就是正常顯示了,這里設置的是觀看保存后的視頻的角度recorder.setOrientationHint(90);//設置錄像的分辨率recorder.setVideoSize(176, 144);

----3.4 設置文件存儲路徑,這里簡陋了,實際開發中需要判斷是否有外部存儲,是否有目標目錄 ,是否已經存在相同名字的文件 等問題

//設置輸出文件路徑

saveFile = new File(Environment.getExternalStorageDirectory()            .getCanonicalFile() + "/myvideo.mp4");recorder.setOutputFile(saveFile.getAbsolutePath());

----3.5 使用SurfaceView進行預覽

recorder.setPreviewDisplay(surfaceView.getHolder().getSurface());

----3.6 開始錄制

recorder.prepare();//開始錄制recorder.start();//讓開始按鈕不可點擊,停止按鈕可點擊startRecord.setEnabled(false);stopRecord.setEnabled(true);isRunning = true;

----3.7 停止錄制

 //停止錄制recorder.stop();//釋放資源recorder.release();recorder = null;//設置開始按鈕可點擊,停止按鈕不可點擊startRecord.setEnabled(true);stopRecord.setEnabled(false);

完整代碼:

 package com.xqx.mediarecorder.app;  import android.app.Activity;  import android.media.MediaRecorder;  import android.os.Bundle;  import android.os.Environment;  import android.view.SurfaceHolder;  import android.view.SurfaceView;  import android.view.View; import android.widget.Button; import android.hardware.Camera; import java.io.File; import java.io.IOException; public class WorkRecorder extends Activity implements Camera.PreviewCallback {   // 開始錄制,停止錄制按鈕   private Button startRecord,stopRecord;   // 顯示預覽的SurfaceView   private SurfaceView surfaceView;   // 標記,判斷當前是否正在錄制   boolean isRunning = false;   // 錄制類   private MediaRecorder recorder;   // 存儲文件   private File saveFile;   @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_work_recorder);     startRecord = (Button) findViewById(R.id.startRecord);     stopRecord = (Button) findViewById(R.id.stopRecord);     surfaceView = (SurfaceView) findViewById(R.id.surView);     // onCreate()初始化 ,一開始肯定沒有開始錄制,所以停止按鈕不可點擊     stopRecord.setEnabled(false);     // 設置Surface不需要維護自己的緩沖區     surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);     // 設置分辨率     surfaceView.getHolder().setFixedSize(, );     // 設置該組件不會讓屏幕自動關閉     surfaceView.getHolder().setKeepScreenOn(true);   }   /**    * 開始錄制    * @param view    */   public void btnStartRecord(View view) {     // 首先判斷當前是否處理視頻錄制狀態,只有不是錄制狀態的時候,才可以開始錄制     if (!isRunning){       try {         //創建MediaRecorder對象         recorder = new MediaRecorder();         recorder.reset();         //.設置采集聲音         recorder.setAudioSource(MediaRecorder.AudioSource.MIC);         //設置采集圖像         recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);         //.設置視頻,音頻的輸出格式         recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_);         //.設置音頻的編碼格式         recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);         //設置圖像的編碼格式         recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H);         //設置立體聲         recorder.setAudioChannels();         //設置最大錄像時間 單位:毫秒         recorder.setMaxDuration();         //設置最大錄制的大小 單位,字節         recorder.setMaxFileSize(*);         //音頻一秒鐘包含多少數據位         recorder.setAudioEncodingBitRate();         //設置選擇角度,順時針方向,因為默認是逆向度的,這樣圖像就是正常顯示了,這里設置的是觀看保存后的視頻的角度         recorder.setOrientationHint();         //設置輸出文件路徑 //        saveFile = FileUtils.getMediaRecoderFolder(this);         saveFile = new File(Environment.getExternalStorageDirectory()             .getCanonicalFile() + "/myvideo.mp"); //    recorder.setVideoSize(, ); //    recorder.setVideoFrameRate();         recorder.setOutputFile(saveFile.getAbsolutePath());         //使用SurfaceView預覽         recorder.setPreviewDisplay(surfaceView.getHolder().getSurface());         recorder.prepare();         //開始錄制         recorder.start();         //讓開始按鈕不可點擊,停止按鈕可點擊         startRecord.setEnabled(false);         stopRecord.setEnabled(true);         isRunning = true;       } catch (IOException e) {         e.printStackTrace();       }     }   }   /**   * 結束錄制   * @param view   */   public void btnStopRecord(View view) {     if (isRunning){       //停止錄制       recorder.stop();       //釋放資源       recorder.release();       recorder = null;       //設置開始按鈕可點擊,停止按鈕不可點擊       startRecord.setEnabled(true);       stopRecord.setEnabled(false);     }   }   @Override   public void onPreviewFrame(byte[] data, Camera camera) {   } }

本例子只是一個簡單的Demo,用于給剛接觸MediaRecorder音頻錄制的coder學習,存在一些Bug和不足,各位coder可以繼續拓展

不足:

1、只有當點擊“開始錄制”的時候SurfaceView組件才可以看到攝像頭拍攝的預覽,否則是一篇黑,這里可以看下Canera類,進行相應的調整

2、保存路徑,需要判斷是否有外部存儲,存儲空間是否足夠,路徑是否不存在,是否有已有的文件名相同的文件存在等問題,設置文件的名字,我這里是固定路徑固定文件名

3、攝像預覽效果是有90度旋轉的,這里需要大家個人去看下MedioRecoder的API 去進行設置

4、沒有設置對焦,像素不清楚,攝像寬高變形

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久成人人人人精品欧| 日韩一区二区福利| 久久久久久久成人| 91高潮在线观看| 亚洲精品中文字幕av| 亚洲第一区第二区| 久久国产精品久久精品| 欧美日本啪啪无遮挡网站| 欧美日韩美女在线观看| 国产欧美精品日韩精品| 在线播放国产精品| 久久国产精品久久久久| 日韩精品在线免费观看| 精品久久香蕉国产线看观看亚洲| 欧美成人免费在线视频| 久久天天躁狠狠躁夜夜躁| www国产亚洲精品久久网站| 欧美超级乱淫片喷水| 51ⅴ精品国产91久久久久久| 久久精品夜夜夜夜夜久久| 精品国产成人在线| 日韩中文字幕在线视频| 精品久久久久久国产91| 中文字幕亚洲色图| 超碰精品一区二区三区乱码| 久久久久成人精品| 国产精品海角社区在线观看| 欧美视频一二三| 日韩av片永久免费网站| 成人性生交大片免费看小说| 黑人巨大精品欧美一区二区一视频| 国产精品青青在线观看爽香蕉| 欧美日韩国产中文字幕| 亚洲黄页视频免费观看| www.亚洲人.com| 国产精品国产亚洲伊人久久| 日本精品性网站在线观看| 国产一级揄自揄精品视频| 亚洲欧美制服综合另类| 亚洲精品999| 国产aⅴ夜夜欢一区二区三区| 日韩毛片中文字幕| 亚洲石原莉奈一区二区在线观看| 成人午夜两性视频| 久热99视频在线观看| 亚洲欧洲在线播放| 久久亚洲一区二区三区四区五区高| www.色综合| 日本精品一区二区三区在线播放视频| 欧美激情乱人伦| 国产精品久久久久国产a级| 亚洲国产成人91精品| 91夜夜未满十八勿入爽爽影院| 91九色单男在线观看| 57pao精品| 欧美夜福利tv在线| 亚洲护士老师的毛茸茸最新章节| 日本午夜在线亚洲.国产| 久久精品91久久久久久再现| 中文字幕欧美日韩va免费视频| 欧美另类99xxxxx| 欧美一区第一页| 黑人极品videos精品欧美裸| 国语自产精品视频在免费| 日韩不卡中文字幕| 亚洲人精品午夜在线观看| 高清欧美性猛交xxxx| 菠萝蜜影院一区二区免费| 亚洲综合中文字幕在线| 自拍偷拍免费精品| 亚洲摸下面视频| 中文字幕亚洲无线码a| 热草久综合在线| 亚洲精品中文字幕女同| 国产主播喷水一区二区| 丝袜美腿亚洲一区二区| 国产美女精品免费电影| 国产精品久久网| 亚洲成av人片在线观看香蕉| 国产中文字幕日韩| 久久精品成人欧美大片| 欧美午夜性色大片在线观看| 青青草原一区二区| 亚洲精品久久在线| 日韩日本欧美亚洲| www.日韩欧美| 国产最新精品视频| 亚洲电影免费观看| www.日韩免费| 欧美视频精品一区| 69国产精品成人在线播放| 久久综合亚洲社区| 中文字幕亚洲欧美日韩高清| 在线免费观看羞羞视频一区二区| 国产精品夫妻激情| 成人网欧美在线视频| 岛国av午夜精品| 亚洲福利小视频| 欧美性极品xxxx娇小| 日韩在线资源网| 欧美大片第1页| 欧美精品电影在线| 精品国产乱码久久久久久虫虫漫画| 国产精品久久久久久av| 欧美日韩亚洲视频| 久久久免费高清电视剧观看| 日韩成人在线免费观看| 久久久久久国产免费| 国产精品爱久久久久久久| 亚洲最大福利视频网站| 日韩成人在线视频观看| 久久夜精品香蕉| 日本一区二三区好的精华液| 日韩中文字幕国产| 国产成人精品午夜| 色噜噜国产精品视频一区二区| 亚洲欧洲中文天堂| 欧美—级高清免费播放| 高清欧美性猛交xxxx| 亚洲aa中文字幕| 一个人看的www久久| 国产97在线观看| 欧美另类在线播放| 国内久久久精品| 久久精品国产欧美亚洲人人爽| 欧美专区第一页| 91在线免费网站| 欧美性极品xxxx做受| 久久亚洲一区二区三区四区五区高| 欧美在线视频免费播放| 国产精品免费久久久久影院| 欧美肥婆姓交大片| 91久久国产婷婷一区二区| 日韩成人xxxx| 夜夜嗨av一区二区三区免费区| 欧美日韩精品二区| 国产精品v日韩精品| 91网站免费观看| 亚洲电影免费观看高清完整版在线观看| 欧美专区在线观看| 伊人成人开心激情综合网| 亚洲国产精品va| 亚洲电影免费在线观看| 91久久在线观看| 性欧美xxxx| 日韩精品久久久久| 亚洲影院高清在线| 亚洲欧美综合区自拍另类| 激情懂色av一区av二区av| 91香蕉电影院| 亚洲精品在线观看www| 国内精品免费午夜毛片| 91亚洲国产成人久久精品网站| 国产精品日韩精品| 欧美大尺度在线观看| 欧美成人免费视频| 国产精品极品在线| 亚洲精品videossex少妇| 成人性生交xxxxx网站| 亚洲精品白浆高清久久久久久| 欧美亚洲第一区| 久久久久久成人精品| 日韩亚洲成人av在线| 热99精品里视频精品|