使用 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]
。
注意:它不会发生在后置摄像头中。
前置摄像头不工作,显示黑条
测试的设备:
- 模拟器:Pixel C API 29
- 设备:Galaxy Tab S2
- 模式:纵向
我想要全屏视图,所以当我没有在下面的注释行中设置 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)
我被这个问题困了好几天了
我在 Kotlin 中遵循了这个 Android 的官方相机示例: android's camera-sample
我于 2020 年 2 月 11 日在 github issue 上提出了一个问题,但没有收到任何反馈。
我的问题是:
我按原样使用了示例,只是将前置摄像头的 val cameraId = manager.cameraIdList[0]
更改为 val cameraId = manager.cameraIdList[1]
。
注意:它不会发生在后置摄像头中。
前置摄像头不工作,显示黑条 测试的设备:
- 模拟器:Pixel C API 29
- 设备:Galaxy Tab S2
- 模式:纵向
我想要全屏视图,所以当我没有在下面的注释行中设置 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)