解决AndroidCamera2官方Demo的bug
来源:互联网 发布:超级优化基因液txt网盘 编辑:程序博客网 时间:2024/05/19 06:17
做Android开发好多年了,也没有想过要写博客,一直都是伸手党。现如今因公司业务需要,需要自定义相机,就从官方下载了个Demo准备研究一下,谁知道官方大神代码在录制视频执行stopRecordingVideo方法是报错,没办法只有边查资料边研究。其实最后的原因是因为没有释放Session的会话而造成的,具体的解决方案我贴出来,如果有人看不明白可以咨询我或者留言。
最终解决方案:
先修改stopRecordingVideo方法:
private void stopRecordingVideo() { // UI mIsRecordingVideo = false; mButtonVideo.setText(R.string.record); /** * 对预览的Session进行释放,这里我们进行异常的捕获。 */ try { mPreviewSession.stopRepeating(); mPreviewSession.abortCaptures(); } catch (CameraAccessException e) { e.printStackTrace(); } // Stop recording// mMediaRecorder.stop();// mMediaRecorder.reset(); /** * stop会抛出异常,这里我们进行捕获,如果MediaRecorder调用停止方法异常, * 我们就需要释放对象。否则MediaRecorder不停止再次录制会报错。 */ try { mMediaRecorder.stop(); mMediaRecorder.reset(); } catch (Exception e) { e.printStackTrace(); mMediaRecorder = null; } Activity activity = getActivity(); if (null != activity) { Toast.makeText(activity, "Video saved: " + mNextVideoAbsolutePath, Toast.LENGTH_SHORT).show(); Log.d(TAG, "Video saved: " + mNextVideoAbsolutePath); } mNextVideoAbsolutePath = null; startPreview(); }接着修改setUpMediaRecorder方法:
private void setUpMediaRecorder() throws IOException { final Activity activity = getActivity(); if (null == activity) { return; } /** * 因为MediaRecorder在捕获异常的时候我们释放了,这里如果不重新new的话会报空指针。 * 所以这里我们也要修改一下。 */ if (mMediaRecorder == null){ mMediaRecorder = new MediaRecorder(); mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); } else { mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); } if (mNextVideoAbsolutePath == null || mNextVideoAbsolutePath.isEmpty()) { mNextVideoAbsolutePath = getVideoFilePath(getActivity()); } mMediaRecorder.setOutputFile(mNextVideoAbsolutePath); mMediaRecorder.setVideoEncodingBitRate(10000000); mMediaRecorder.setVideoFrameRate(30); mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight()); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); switch (mSensorOrientation) { case SENSOR_ORIENTATION_DEFAULT_DEGREES: mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation)); break; case SENSOR_ORIENTATION_INVERSE_DEGREES: mMediaRecorder.setOrientationHint(INVERSE_ORIENTATIONS.get(rotation)); break; } mMediaRecorder.setOrientationHint(0); mMediaRecorder.prepare();}
阅读全文
0 0
- 解决AndroidCamera2官方Demo的bug
- TSMessages,非HUD风格的iOS提示框(附官方demo BUG修复方案)
- 解决微信官方提供的JSAPI php demo的问题
- eclipse的bug解决
- 小bug的解决
- 解决onSaveInstanceState的Bug
- 解决电池的BUG
- 关于官方的micropython demo 的使用
- Extjs4 学习portal 的官方demo
- apple 苹果官方的demo 下载地址
- 解析Tensorflow官方PTB模型的demo
- 百度地图官方Demo的运行使用
- 关于JFinal官方Demo的理解
- 官方Camera2 video Demo崩溃的修正
- 适合新人学习的iOS官方Demo
- [Bug]官方HttpClient的一处Bug及解决办法
- ionic3内容置顶按钮,在csdn一个demo基础上修改的,解决按钮在过渡过程中忽隐忽现的bug...
- 解决系统托盘的关机Bug
- 902AVisiting a Friend
- spring boot example
- Java的几大特征简要说明
- 读《重构(Ruby版)》
- 【java基础:JDBC】采用DBUtils工具集进行数据库的增删改操作的demostration
- 解决AndroidCamera2官方Demo的bug
- Fiddler 使用
- 封装OkHttp3
- 《Java 编程技巧1001条》 第383条 了解数组的引用,
- 【bzoj1176】[Balkan2007]Mokia
- 关于BlockCanary的源码分析
- python17-12-21-
- C-COT目标跟踪代码下载运行
- python安装后无scripts内文件,无法使用pip