public class VedioTextureView extends TextureView { private MediaPlayer mediaPlayer; private boolean isPrepared = false; private boolean isRecord = false; private boolean isPlay = false; private Camera camera; private SurfaceTexture surfaceTexture; private MediaRecorder recorder; public VedioTextureView(Context context){ this(context,null); } public VedioTextureView(Context context, AttributeSet attrs){ this(context,attrs,0); } public VedioTextureView(Context context, AttributeSet attrs,int defStyleAttr){ super(context,attrs,defStyleAttr); init(); } private void init(){ camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); camera.setDisplayOrientation(90); mediaPlayer = new MediaPlayer(); recorder = new MediaRecorder(); camera.unlock(); recorder.setCamera(camera); try { mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setScreenOnWhilePlaying(true); mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { Log.i("wanlijun","onPrepared"); isPrepared = true; } }); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { Log.i("wanlijun","播放完畢"); } }); recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); recorder.setVideoSize(640,480); recorder.setVideoFrameRate(30); recorder.setVideoEncodingBitRate(3*1024*1024); recorder.setOrientationHint(90); recorder.setMaxDuration(30*1000); recorder.setOnInfoListener(new MediaRecorder.OnInfoListener() { @Override public void onInfo(MediaRecorder mr, int what, int extra) { } }); }catch (Exception e){ mediaPlayer.reset(); e.printStackTrace(); Log.i("wanlijun","init:"+e.toString()); } setSurfaceTextureListener(new SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { if(surfaceTexture == null){ surfaceTexture = surface; mediaPlayer.setSurface(new Surface(surface)); // try { // mediaPlayer.prepare(); // }catch (Exception e){ // e.printStackTrace(); // Log.i("wanlijun","prepare:"+e.toString()); // } // isPrepared = true; recorder.setPreviewDisplay(new Surface(surface)); try { camera.setPreviewTexture(surface); camera.startPreview(); }catch (Exception e){ e.printStackTrace(); } }else{ setSurfaceTexture(surfaceTexture); } } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { if(recorder != null){ recorder.release(); recorder = null; camera.lock(); } if(mediaPlayer != null){ mediaPlayer.release(); mediaPlayer = null; } if(camera != null) { camera.stopPreview(); camera.release(); camera = null; } return true; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surface) { } }); } public void record(){ if(isRecord){ isRecord = false; camera.lock(); recorder.stop(); }else{ String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath() + "/Camera/one.mp4"; Log.i("wanlijun","path:"+path); recorder.setOutputFile(path); try { recorder.prepare(); recorder.start(); isRecord = true; }catch (Exception e){ e.printStackTrace(); isRecord = false; Log.i("wanlijun","record:"+e.getMessage()); } } } public void start(){ if(isPlay){ isPlay = false; if(mediaPlayer != null){ mediaPlayer.stop(); } }else{ if(mediaPlayer != null){ try { String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath() + "/Camera/one.mp4"; Log.i("wanlijun","path:"+path); mediaPlayer.setDataSource(path); mediaPlayer.prepare(); if(isPrepared){ mediaPlayer.start(); }else{ Log.i("wanlijun","還未準備就緒,請稍等"); } }catch (Exception e){ e.printStackTrace(); } } } } public void stop(){ if(mediaPlayer != null){ mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } } }
自定義TextureView錄製視頻的一些初始化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.