【问题标题】:Android continuous recording in the background with edit framesAndroid在后台使用编辑框连续录制
【发布时间】:2021-08-17 10:02:36
【问题描述】:

我想实现相机应用,但我不知道要使用哪个 API。对于这些标准,您会选择哪些 API?

  • Activity 显示全屏相机预览。
  • 用户可以在有/没有来自 Activity 的声音的情况下开始/停止视频录制。
  • 如果 Activity 在前台,则显示全屏相机预览(可能从 onResume() 开始)。
  • 如果活动进入后台,预览将停止(可能在 onPause() 中),但会在后台继续录制并显示通知。
  • 为所有视频帧添加日期 + 时间 + 一些可绘制对象,这些视频帧进入编解码器(而不是预览)以进行前景/背景录制。
  • Android API 23+(可以更高)。

可供选择的 API:
Camera 1, Camera 2, CameraX, MediaRecorder, MediaCodec + Muxer, OpenGL surface, ..?

你会用什么 API 来实现它?有没有例子?首选 Kotlin。
活动/片段/服务不是问题的一部分。

【问题讨论】:

    标签: android android-camera android-camera2 recording android-camerax


    【解决方案1】:

    由于您希望在将每一帧发送到视频编码器之前对其进行编辑,因此您可以使用 camera2 或 cameraX(ImageAnalysis+Preview 用例),分辨率至少高达 1080p。如果您想录制高于 1080p 的视频,则可能需要使用 camera2。

    对于编辑,您可以使用 EGL 渲染,这将是相当有效的,但文本渲染很复杂,因此您需要找到一些库来帮助解决这个问题。尽管在 CPU 上进行编辑也是如此。

    使用 Camera2,对于 EGL,您可以为输入创建一个 SurfaceTexture,您可以将其传递给 Camera2(通过 Surface),也可以写出到一个 Surface,该 Surface 会发送到 MediaRecorder/MediaCodec。对于 CPU,您可能需要一个 Camera->ImageReader / ImageWriter->MediaRecorder 对,并在中间进行编辑。

    对于 CameraX ImageAnalysis,您会获得需要从 CPU 读取或发送到 ImageWriter 以进行 EGL 处理的 Image 对象。

    如果您将视频保存到磁盘,MediaRecorder 应该可以正常工作。 MediaCodec + MediaMuxer 让您获得更多控制权(通过网络发送帧等),但更复杂。

    【讨论】:

      【解决方案2】:

      在相机方面,Camera2 是唯一的选择,因为 CameraX 目前不支持 Video。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多