使用MediaRecorder进行视频录制

来源:互联网 发布:微控制器是单片机 编辑:程序博客网 时间:2024/05/21 21:42

1.仅适用MediaRecorder进行录制,此种方式网上很多,就是不加camera实现。

2.使用MediaRecorder+camera进行录制,此种方式可能会出现问题,下面的代码经过在4.4以及5.1系统测试均没问题。

权限

 <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /><uses-permission     android:name="android.permission.RECORD_AUDIO"></uses-permission><uses-permission     android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>


private Camera mCamera;private SurfaceView mSurfaceView;private SurfaceHolder mSurfaceHolder;private CameraInfo[] mCameraInfo;private Button startButton;private boolean mIsRecording = false;private MediaRecorder mediaRecorder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mSurfaceView = (SurfaceView)findViewById(R.id.surfaceview);mSurfaceHolder = mSurfaceView.getHolder();mSurfaceHolder.addCallback(new Callback() {@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {releaseCamera();}@Overridepublic void surfaceCreated(SurfaceHolder holder) {initpreview();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}});startButton = (Button)findViewById(R.id.start);startButton.setOnClickListener(this);}protected void releaseCamera() {if(mCamera!=null){mCamera.stopPreview();mCamera.release();mCamera = null;}}protected void initpreview() {mCamera = Camera.open(CameraInfo.CAMERA_FACING_BACK);try {mCamera.setPreviewDisplay(mSurfaceHolder);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}setCameraDisplayOrientation(this,CameraInfo.CAMERA_FACING_BACK,mCamera);mCamera.startPreview();} public static void setCameraDisplayOrientation(Activity activity,         int cameraId, android.hardware.Camera camera) {     android.hardware.Camera.CameraInfo info =             new android.hardware.Camera.CameraInfo();     android.hardware.Camera.getCameraInfo(cameraId, info);     int rotation = activity.getWindowManager().getDefaultDisplay()             .getRotation();     int degrees = 0;     switch (rotation) {         case Surface.ROTATION_0: degrees = 0; break;         case Surface.ROTATION_90: degrees = 90; break;         case Surface.ROTATION_180: degrees = 180; break;         case Surface.ROTATION_270: degrees = 270; break;     }     int result;     if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {         result = (info.orientation + degrees) % 360;         result = (360 - result) % 360;  // compensate the mirror     } else {  // back-facing         result = (info.orientation - degrees + 360) % 360;     }     camera.setDisplayOrientation(result); }@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onClick(View view) {int id = view.getId();switch (id) {case R.id.start:if(mIsRecording==false) {startmediaRecorder();}else{stopmediaRecorder();}if(mIsRecording){startButton.setText("stop");}else{startButton.setText("start");}break;default:break;}}private void stopmediaRecorder() {if(mediaRecorder!=null){if(mIsRecording){mediaRecorder.stop();//mCamera.lock();mediaRecorder.reset();mediaRecorder.release();mediaRecorder=null;mIsRecording = false;try {mCamera.reconnect();} catch (IOException e) {Toast.makeText(this, "reconect fail", 0).show();e.printStackTrace();}}}}private void startmediaRecorder() {mCamera.unlock();mIsRecording = true;mediaRecorder = new MediaRecorder();mediaRecorder.reset();mediaRecorder.setCamera(mCamera);mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);CamcorderProfile mCamcorderProfile = CamcorderProfile.get(CameraInfo.CAMERA_FACING_BACK, CamcorderProfile.QUALITY_480P);mediaRecorder.setProfile(mCamcorderProfile);mediaRecorder.setVideoFrameRate(20); String fileName = DateUtils.formatDate(new Date(), "yyyyMMddHHmmss");File file = new File(Environment.getExternalStorageDirectory(), fileName + ".mp4");mediaRecorder.setOutputFile(file.getAbsolutePath());mediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());try {mediaRecorder.prepare();} catch (Exception e) {mIsRecording = false;Toast.makeText(this, "fail", 0).show();e.printStackTrace();mCamera.lock();}mediaRecorder.start();}



0 0
原创粉丝点击