- [ ] Android 四大组件之ActivityRecord分析
- [ ] Android 四大组件之BroadcastRecord
- [ ] Android 四大组件之ContentProviderRecord)
- [ ] Android 四大组件之ServiceRecord
每个APP进程运行的service,对应于system_server进程中AMS的ServiceRecord对象,即所有app进程的Service,都会记录在system_server进程中。
做一个有追求的青年
每个APP进程运行的service,对应于system_server进程中AMS的ServiceRecord对象,即所有app进程的Service,都会记录在system_server进程中。
Android通过Open Graphics Library(OpenGL®),特别是OpenGL ES API包括对高性能2D和3D图形的支持。OpenGL是一种跨平台的图形API,它为3D图形处理硬件指定了标准的软件接口。OpenGL ES是用于嵌入式设备的OpenGL规范的一种形式。Android支持以下几种版本的OpenGL ES API:
也就是说目前主流Android 4.4以上的设备都可以使用OpenGL ES 3.0了。
了解MediaCodec
API的基本使用,熟悉使用MediaCodec
编解码的一般流程;
使用MediaCodec
硬解码AAC
音频文件;
使用MediaCodec
硬解码H.264
视频文件;
[x] 音视频基础0——目录
[x] 音视频基础1——AudioTrack、AudioRecorder、MediaRecorder音频数据采集播放处理
[x] 音视频基础6——交叉编译动态库
音视频学习的视频学习部分,必须熟练掌握Camera API的原理即使用,而Android在5.0(API>=21)就提供了Camera2 API,并且建议应用使用Comera2 API,在androidX支持库中还提供了CameraX包,本文主要就是介绍Camera API、Camera2 API 以及androidX中CameraX的使用
在Google提出Camera2 API之前,所有的相机操作,都是通过Camera这个类完成的,Camera类独自承接了以下以下工作:
代码虽然多,但是看起来简单,用起来更简单。
1 | Camera camera = Camer.open(CAMERA_ID);// CAMERA_ID通常为Camera.CameraInfo.CAMERA_FACING_BACK或CAMERA_FACING_FRONT |
SurfaceView
抓取视频数据时,需要再SurfaceView
创建后再初始化相机,并在SurfaceView
销毁时释放相机资源;lock()
/unlock()
的调用,具体可以看看两个函数的说明;Camera2 虽然功能比Camera强大,但类结构也复杂了不少,不过好在各个类的职责还是比较明确的。CameraMamager负责获取CameraDevice,CameraDevice负责获取可以创建CaptureRequest的CaptureRequest.Builder,而且可以建立数据接收者Surface和数据收集者CameraDevice之间的会话,并在会话成功建立后,通过CaptureRequest来对相机进行配置。至于使用者是想进行拍照还是进行录屏,只要在创建CaptureRequest指定不同的模板,并在建立会话是传递不同的数据接收者就可以了。分工明确,流程清楚。
主要对核心类进行说明:
CameraManager
,系统服务(需要通过Context
的getSystemService
方法来获取,用来对CameraDevice
进行检测(是否有新的Camera)、控制(如何打开等)、连接、闪光灯控制等,是Camera2
的核心类。getCameraIdList
,查询可用的Camera列表,如前置后置;AvailabilityCallback
,Camera可用性回调通知;TorchCallback
,闪光灯状态回调;openCamera
(),打开Camera;getCameraCharacteristics
,查询到这个连接的相机支持哪些功能;CameraDevice
,代表的就是一个链接到Android设备的Camera,通过Camera Device
你可以创建CameraCaptureSession
,创建CaptureRequest
;CameraCharacteristics
,CameraDevice
的属性描述文件,类似于Camera.Parameters,但包含更多的属性配置。SurfaceView
抓取视频数据时,需要再SurfaceView
创建后在获取CameraDevice,并在SurfaceView
销毁时释放CameraDevice;E/MediaRecorder: stop called in an invalid state: 0
,MediaRecorder: stop failed :-1007
,MediaRecorder: start failed: -38
,说明Camera
正在被使用,有可能是别的MediaRecorder
没有释放,有可能是用来预览的CaptureSession
没有关闭,我的原因是后者,开始录屏时一定要关闭预览的CameraCaptureSession
java.lang.IllegalArgumentException: CaptureRequest contains unconfigured Input/Output Surface!