使用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
- 使用MediaRecorder进行视频录制
- 使用MediaRecorder录制视频,并进行播放
- Android使用MediaRecorder类进行录制视频
- android中使用MediaRecorder进行视频录制笔记
- Android 中使用MediaRecorder进行录像详解(视频录制)
- android中使用MediaRecorder进行视频录制笔记
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- Android 中使用MediaRecorder进行录像详解(视频录制)
- 使用MediaRecorder录制音视频
- Android开发之使用MediaRecorder录制视频
- Android开发之使用MediaRecorder录制视频
- Unable to create 'E:/NFVdoc/.git/index.lock': File exists.解决方法
- 对称、非对称密码体制
- 挂机型外挂开发-脚本引擎
- C++常用小技巧个人总结(持续更新)
- How to set up CA server on server 2012
- 使用MediaRecorder进行视频录制
- java获取Weblogic JNDI数据源
- 交叉编译mysql客户端libmysql
- Android开源:数据库ORM框架GreenDao学习(一)基础使用篇
- 服务系能查看-通过gc和cpu定位代码问题
- Python图形界面编程---Tkinter模块基础
- Qt之设置系统托盘
- iOS自定义的表情键盘
- rxjava(三)Subject与Scheduler