最近需要修改项目中的视频录制功能,原来没怎么理会,可以正常录制。
但是不录制直接返回Camera
就会出现占用情况,而且连系统相机都无法正常使用了。
只能重启手机,调试起来也比较麻烦。
最后发现 由于不当的调用
camera.lock()
和camera.unlock()
导致的
看一看这两个方法的解释
1 | /** |
lock()
方法是一个native方法
注释的大概意思是
调用这个方法重新锁定相机以防止其他进程访问它。系统默认的状态就是locked
状态,可以调用unlock()
或者reconnect()
来使用
还有注释说API 14 之后当你调用了MediaRecorder.start()
方法lock()
会自动调用。这就解释了为什么正常录制视频不会占用相机
看看另外一个方法
1 | /** |
这个注释写的很清楚了
调用unlock()
方法允许其他进程使用,同时正在使用Camera
是locked
状态
还有调视频录制的时候必须先调unlock()
然后在调MediaRecorder.setCamera(Camera)
总结
视频录制的步骤如下:
- 调用
unlock()
方法 - 调用
MediaRecorder.setCamera(Camera)
方法 - 开始录制
- 停止录制
- 释放
MediaRecorder
- 调用
lock()
方法 - 释放
Camera
这就是完整的步骤了。
这里有个Demo可以参考一下GITHUB