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

首頁 > 學院 > 開發設計 > 正文

使用mediaRecorder錄像的小坑

2019-11-09 14:09:13
字體:
來源:轉載
供稿:網友

之前寫好的工具類,直接封裝好了,代碼如下:

package jun.yuanlai;import android.content.Context;import android.hardware.Camera;import android.media.CamcorderPRofile;import android.media.MediaRecorder;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.SurfaceView;import android.view.View;import android.widget.Toast;import java.io.File;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;/** * Created by cj on 2016/11/29. */public class Recorderutil {    private static final String TAG = "cj";    Context context;    private MediaRecorder mediaRecorder;    private SurfaceView sv_view;    private boolean isRecording;    private int time;    private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            sv_view.setVisibility(View.GONE);            Toast.makeText(context, "停止錄像,并保存文件", Toast.LENGTH_SHORT).show();        }    };    public Recorderutil(Context context, MediaRecorder mediaRecorder, SurfaceView sv_view, int time) {        this.context = context;        this.mediaRecorder = mediaRecorder;        this.sv_view = sv_view;        this.time = time;    }    public void startRecord() {        //準備名字        Date date = new Date();        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm");        String format = dateFormat.format(date);        String path = Environment.getExternalStorageDirectory().getAbsolutePath();        String name = path + "/" + format + ".mp4";        //準備好了        sv_view.setVisibility(View.VISIBLE);        try {            File file = new File(name);            if (file.exists()) {                // 如果文件存在,刪除它,演示代碼保證設備上只有一個錄音文件                file.delete();            }            mediaRecorder = new MediaRecorder();//			mediaRecorder.reset();//            mediaRecorder.setCamera(Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT));            // 設置音頻錄入源            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);            // 設置視頻圖像的錄入源            mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);            Log.e(TAG, "start: 輸出格式");            // 設置錄入媒體的輸出格式            mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);            // 設置音頻的編碼格式            mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);            // 設置視頻的編碼格式//			mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);            mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);            // 設置視頻的采樣率,每秒4幀            mediaRecorder.setVideoFrameRate(4);            // 設置視頻錄制的分辨率。必須放在設置編碼和格式的后面,否則報錯//			mediaRecorder.setVideoSize(240, 240);            //一換這個6.0就走起來了            CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);            mediaRecorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);//			mediaRecorder.setVideoEncodingBitRate(640*480);            // 設置錄制視頻文件的輸出路徑            Log.e(TAG, "start: 輸出路徑");            mediaRecorder.setOutputFile(file.getAbsolutePath());            // 設置捕獲視頻圖像的預覽界面            mediaRecorder.setPreviewDisplay(sv_view.getHolder().getSurface());//			mediaRecorder.setOrientationHint(180);// 視頻旋轉            Log.e(TAG, "start: surfaceholder也有了");            mediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {                @Override                public void onError(MediaRecorder mr, int what, int extra) {                    Log.e(TAG, "onError: 錄制出錯");                    // 發生錯誤,停止錄制                    mediaRecorder.stop();                    mediaRecorder.release();                    mediaRecorder = null;                    isRecording = false;                    Toast.makeText(context, "錄制出錯", Toast.LENGTH_SHORT).show();                }            });            // 準備、開始            mediaRecorder.prepare();            Log.e(TAG, "start: 不走了");            mediaRecorder.start();            Log.e(TAG, "start: 也開始了");            isRecording = true;            Toast.makeText(context, "開始錄像", Toast.LENGTH_SHORT).show();        } catch (Exception e) {            e.printStackTrace();            Log.e(TAG, "startRecord: "+e.toString() );        }        //錄制5秒后自動停止        Timer timer = new Timer();        timer.schedule(new TimerTask() {            @Override            public void run() {                stopRecord();            }        },time);    }    public  void stopRecord(){        if (isRecording) {            // 如果正在錄制,停止并釋放資源            mediaRecorder.stop();            mediaRecorder.release();            mediaRecorder = null;            isRecording=false;            new Thread(new Runnable() {                @Override                public void run() {                    handler.sendEmptyMessage(0);                }            }).start();        }else{            Log.e(TAG, "已經停止錄制" );        }    }}

我調用的時候直接使用這兩句就可以了;如下:

MediaRecorder mediaRecorder = new MediaRecorder();                Recorderutil recorderutil = new Recorderutil(this,mediaRecorder,surfaceview,10000);                recorderutil.startRecord();通過按鈕調用的時候,我的紅米是4.4.2的系統,會彈出一個請求訪問相機的對話框,允許之后就可以直接開始錄像了,但是蹊蹺的是如果不通過button調用,

會出現問題就是mediarecorder啟動不了,會執行異常catch塊,報的錯誤是invalid preview surface,意思就是無效的surfaceview,但是為什么會出現那樣的問題呢?至今沒有想明白,只好百度,不得不說,會點英語還是挺好的,中國的博客沒有一個解釋清楚的,結果又一個stackoverflow網站上,有這個問題,好好研讀了一下,原因就是surfaceview還沒有初始化好呢,就調用了 mediaRecorder.setPreviewDisplay(holder.getSurface());解決方法就是等surfaceview完全創建之后再進行調用,所以就需要改代碼,改成在activity里調用的時候先getholder,在create回調里面進行錄制視頻,就好了

SurfaceHolder holder = surfaceview.getHolder();                holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);                holder.addCallback(new SurfaceHolder.Callback() {                    @Override                    public void surfaceCreated(SurfaceHolder holder) {                        surfaceHolder = holder;                        MediaRecorder mediaRecorder = new MediaRecorder();                        Recorderutil recorderutil = new Recorderutil(MainActivity.this,mediaRecorder,surfaceHolder,10000);                        recorderutil.startRecord();                    }                    @Override                    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {                    }                    @Override                    public void surfaceDestroyed(SurfaceHolder holder) {                    }                });


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
人体精品一二三区| 国产一区二区日韩| 欧美老肥婆性猛交视频| 欧美丝袜一区二区三区| 亚洲精品自在久久| 成人精品一区二区三区| 国产69精品久久久久99| 欧美日韩中文字幕日韩欧美| 亚洲国产精品一区二区久| 国语自产精品视频在线看抢先版图片| 亚洲国产天堂久久综合网| 久久久影视精品| 精品日韩中文字幕| 国产午夜精品一区理论片飘花| 高清欧美性猛交xxxx黑人猛交| 国产精品视频久| 日韩精品福利网站| 在线观看免费高清视频97| 欧美大人香蕉在线| 欧美人与性动交| 亚洲第一视频网站| 亚洲精品视频中文字幕| 奇米成人av国产一区二区三区| 亚洲在线观看视频网站| 亚洲视频777| 日韩av高清不卡| 国模私拍一区二区三区| 欧美日韩在线第一页| 欧美激情亚洲另类| 成人免费淫片视频软件| 另类天堂视频在线观看| 亚洲娇小xxxx欧美娇小| 日韩精品免费综合视频在线播放| 久久人人爽人人爽人人片av高请| 北条麻妃一区二区三区中文字幕| 欧美精品制服第一页| 91av在线精品| 欧美日韩在线另类| 亚洲国产精品久久| 777777777亚洲妇女| 日韩欧美国产免费播放| 亚洲va久久久噜噜噜久久天堂| 视频一区视频二区国产精品| 色婷婷久久一区二区| 日韩欧美国产中文字幕| 日韩欧美中文字幕在线观看| 欧美精品第一页在线播放| 91精品久久久久久久久久入口| 亚洲人高潮女人毛茸茸| 国产成人精品午夜| 亚洲精品成人av| 亚洲精品在线视频| 欧美日韩国产综合新一区| 亚洲第一区第二区| 亚洲风情亚aⅴ在线发布| 亚洲最大福利视频网站| 国产日产久久高清欧美一区| 亚洲欧洲午夜一线一品| 欧美激情三级免费| 国产精品在线看| 91久久久久久| 亚洲视频在线免费看| 91久久精品一区| 欧美激情视频网址| 欧美激情免费观看| yellow中文字幕久久| 色综合91久久精品中文字幕| 国产精品88a∨| 中文字幕欧美专区| 日韩小视频在线| 国产在线观看精品一区二区三区| 美女福利视频一区| 国产成人福利网站| 欧美在线观看视频| 亚洲电影免费观看高清完整版在线| 青草热久免费精品视频| 91精品视频播放| 久久人人看视频| 一区二区成人av| 精品国偷自产在线| 色综合久久88| 91精品国产91久久久久久不卡| 91在线高清视频| 国产噜噜噜噜久久久久久久久| 国产欧美日韩最新| 日韩中文字幕在线播放| 91国内精品久久| 国产精品久久久一区| 91精品久久久久久久久久另类| 欧美大尺度在线观看| 欧美精品激情blacked18| 欧美裸体xxxx极品少妇软件| 91综合免费在线| 在线电影欧美日韩一区二区私密| 久久国产加勒比精品无码| 日韩av在线直播| 在线观看亚洲视频| 精品久久久久久亚洲精品| 欧美激情高清视频| 久久精品视频在线播放| 国产亚洲欧美日韩一区二区| 亚洲人成网站色ww在线| 欧美国产亚洲精品久久久8v| 亚洲乱亚洲乱妇无码| 亚洲国产精品久久久| 色无极影院亚洲| 亚洲裸体xxxx| 欧美裸体男粗大视频在线观看| 91探花福利精品国产自产在线| 亚洲女性裸体视频| 欧美在线视频在线播放完整版免费观看| 国产一区视频在线| 国产精品一区二区久久| 久久99精品视频一区97| 91在线播放国产| 97在线免费观看视频| 亚洲xxxx做受欧美| www.久久撸.com| 国产成人精品综合| 中文字幕欧美日韩在线| 亚洲毛片在线观看.| 欧美成人合集magnet| 亚洲欧美激情一区| 久久综合网hezyo| 中文字幕精品一区久久久久| 欧美日韩成人黄色| 日韩欧美成人免费视频| 亚洲综合中文字幕在线| 亚洲综合精品一区二区| 奇米一区二区三区四区久久| 国产一区av在线| 国产97在线播放| 日韩av电影中文字幕| 欧美野外猛男的大粗鳮| 欧美日韩精品在线视频| 国产欧美最新羞羞视频在线观看| 日韩欧美高清视频| 亚洲免费成人av电影| 国产精品情侣自拍| 亚洲已满18点击进入在线看片| 亚洲色图35p| 国产一区二区三区直播精品电影| 亚洲高清一区二| 91午夜在线播放| 日韩欧美视频一区二区三区| 精品欧美国产一区二区三区| 国产精品久久久久aaaa九色| 91国语精品自产拍在线观看性色| 国产成人一区二区三区小说| 另类色图亚洲色图| 在线视频亚洲欧美| 欧美国产日产韩国视频| 久久久亚洲影院你懂的| 久久久国产一区二区| 成人黄色av网| 日本久久久久亚洲中字幕| 亚洲视频视频在线| 亚洲久久久久久久久久| 97精品一区二区视频在线观看| 欧美日韩综合视频| 欧美视频不卡中文| 亚洲一区二区三区毛片| 精品自拍视频在线观看| 日韩精品中文在线观看|