建设信息网站,山西seo关键词优化软件搜索,网站建设定做,网站备案 深圳CameraX实现录像 首先在起预览时就要配置录像usecase#xff0c;对于cameraX来说就是绑定录像usecase到lifecycle。如下。 1#xff0c;创建Recorder对象#xff0c;是与 VideoCapture 紧密耦合的 VideoOutput 实现。Recorder可以用来配置录像的分辨率、比例等#xff0c;还…  CameraX实现录像 首先在起预览时就要配置录像usecase对于cameraX来说就是绑定录像usecase到lifecycle。如下。 1创建Recorder对象是与 VideoCapture 紧密耦合的 VideoOutput 实现。Recorder可以用来配置录像的分辨率、比例等还有其他诸如视频编码率、音频源等作用类似与mediarecorder但是没mediarecorder能够设置的参数多关于两者更进一步的思考可以见后文。 不过当前这个不支持对自定义的分辨率进行设置只支持设置预定的分辨率同时当前发现也不能设置11与full size尺寸。 2创建 VideoCapture 对象这个是录像的usecase。通过调用VideoCapture.withOutput()来将上面的Recorder对象与VideoCapture绑定返回值就是VideoCapture。 3绑定到 Lifecycle。  接着就是在开始录像的流程。 1使用MediaStoreOutputOptions来配置保存下来的视频文件相关参数例如路径、格式、文件名等。 2通过Recorder.prepareRecording来获取PendingRecording这个中间类最终在其上再调用start()开始录像start()会返回Recording对象。start()会传入一个ConsumerVideoRecordEvent录像回调处理就是在这里。VideoRecordEvent存放了录像状态信息可以在录像回调中读取进行处理。 3停止录像时就用Recording.stop()。 4暂停、恢复录像用Recording.pause()、Recording.resume()。  cameraX实现慢动作录像  官方没有提供跟camera2一样可以在相机侧就实现的慢动作录像的API再一次说明cameraX只能实现简单版的相机。 不过从网上了解到有几种方案 1使用videocapture录制在录制时设置录像帧率为高帧率比如120FPS在停止录像时将已经生成的视频文件通过ffmpeg的命令处理来将视频设定为四分之一速率来播放最终实现在视频播放器播放时用30FPS播放慢动作视频。 2这种方案在相机侧跟上一种一样只是没有将视频文件进行速率转换改成在播放器侧通过mediaplayer类来控制播放速率。这种方式相对来说兼容性差相机侧、视频播放器侧都需要修改。 3mediacodec处理视频编码与帧率调整。  这里采用了第一种方式来实现。 关键点就是在需要用到以下在相机侧设置高帧率。 RangeInteger targetFrameRate  new Range(120, 120); mVideoCapture  new VideoCapture.BuilderRecorder(mRecorder).setTargetFrameRate(targetFrameRate).build(); 在最终生成临时的inputPath文件后再通过ffmpeg命令来转化输出到outputPath public static void convertToSlowMotion(String inputPath,String outputPath) {     String cmd  -i   inputPath   -filter:v \setpts4.0*PTS\    -an   outputPath;//add -an to remove the audio stream.     FFmpegKit.executeAsync(); } 这里的cmd解释如下 -filter:v setpts4.0*PTS调整视频帧的时间戳使得视频播放速度变为原来的四分之一。 -an这个选项告诉 FFmpeg 不要包含任何音频流从而确保输出文件中没有任何音频。  实测该方案可以实现需求。后两种方案等后续再实现试试。  Recorder与Mediarecorder区别 CameraX使用到的recorder类实现的功能类似于camera2常用到的mediarecorder不过两者又有挺大差别。 通过查看源码分析我们可以有以下的简单结论。 recorder专注于视频文件音视频参数相关的像视频码率、音频采样率等都有对应接口可以调用进行相关参数设置。而mediarecorder不止这些还包括一些视频文件保存需要定义的参数比如文件路径、文件大小限制、文件位置信息。这些文件相关的cameraX提供了另一个类MediaStoreOutputOptions来处理相关的配置。一般来说我们实现文件配置相关的功能在MediaStoreOutputOptions、mediarecorder有一一对应的接口。如设置视频文件大小限制的MediaStoreOutputOptions.setFileSizeLimit()与mediarecorder.setMaxFileSize()。  附上源码。