使用 camera2 在前置摄像头中录制全屏视频 api

Full Screen Video Recording in Front Camera using camera2 api

我被这个问题困了好几天了

我在 Kotlin 中遵循了这个 Android 的官方相机示例: android's camera-sample

我于 2020 年 2 月 11 日在 github issue 上提出了一个问题,但没有收到任何反馈。

我的问题是:

我按原样使用了示例,只是将前置摄像头的 val cameraId = manager.cameraIdList[0] 更改为 val cameraId = manager.cameraIdList[1]。 注意:它不会发生在后置摄像头中。

前置摄像头不工作,显示黑条 测试的设备:

我想要全屏视图,所以当我没有在下面的注释行中设置 AutoTextureView 的纵横比时,视频会全屏显示但现在被拉伸了。

if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
  //I only have portrait mode
} else {
  //textureView.setAspectRatio(previewSize.height, previewSize.width)
} 

有没有办法设置全屏模式而不进行任何拉伸或以正确的纵横比设置?

我已经在 slack 中完成了以下解决方案并且 none 对我有用:

Android Camera2 API stretching the preview

工作了几天。 Camera2 full screen preview and image capture帮我解决了问题

AutoFitTextureView 中的 onMeasure 设置为:

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec)
    val width = View.MeasureSpec.getSize(widthMeasureSpec)
    val height = View.MeasureSpec.getSize(heightMeasureSpec)
    if (ratioWidth == 0 || ratioHeight == 0) {
        setMeasuredDimension(width, height)
    } else {
        if (width > ((height * ratioWidth) / ratioHeight)) {
            setMeasuredDimension(width, (width * ratioHeight) / ratioWidth)
        } else {
            setMeasuredDimension((height * ratioWidth) / ratioHeight, height)
        }
    }
}

Above code makes the screen full size but had problem of preview not being at the centre

于是我在configureTransform(viewWidth: Int, viewHeight: Int)

中翻译如下
   // adjust the x and y to centre the preview
   val screenWidth = resources.displayMetrics.widthPixels
   val xShift = (viewWidth - screenWidth)/2

   val screenHeight = resources.displayMetrics.heightPixels
   val yShift = (viewHeight - screenHeight)/2
   matrix.setTranslate(-xShift.toFloat(), -yShift.toFloat())

   textureView.setTransform(matrix)