เวอร์ชัน Android: 5.1
สวัสดี ฉันสังเกตเห็นว่า หลังจาก แอปของฉันใช้ Camera2 API เพื่อสร้างCaptureSession (สแนปชอต/บันทึก) อุปกรณ์ Android ของฉันไม่สามารถเล่นวิดีโอได้อย่างถูกต้องอีกต่อไป มีเพียงเสียงที่มี หน้าจอสีดำ... และไม่ใช่แค่แอปของฉันเท่านั้น แอปสตรีมมิ่งอื่นๆ ทั้งหมดก็ประสบปัญหาเดียวกัน ฉันต้องรีบูตเพื่อแก้ไขปัญหานี้ อย่างไรก็ตาม อุปกรณ์ของฉันได้รับการปรับแต่งดังนั้นฉันจึงไม่สามารถใช้ ADB ได้ และปัญหานี้ก็ไม่เกิดขึ้นในโปรแกรมจำลองของฉันด้วยซ้ำ... ฉันแค่ไม่มีเบาะแสใดๆ เลยตอนนี้ มันกำลังจะฆ่าฉันแล้ว ใครสามารถช่วยฉันหน่อยได้ไหม? ฉันจะขอบคุณมัน..!! ด้านล่างนี้คือวิธีที่ฉันสร้าง CaptureSession และเผยแพร่ อาจมีบางอย่างผิดปกติกับรหัสของฉัน?
ภาพรวม:
...after camera opened
cameraDevice = p0;
previewTextureListener = PreviewSurfaceTextureListener()
cameraPreview.surfaceTextureListener = previewTextureListener
cameraPreview.setTransform(transform)
...after previewTextureListenerAvailable
val captureWidth = 1920
val captureHeight = 1080
previewSurfaceTexture = surfaceTexture
previewSurfaceTexture?.setDefaultBufferSize(captureWidth, captureHeight)
previewSurface = Surface(previewSurfaceTexture)
val sessionStateCallback = SessionStateCallback()
imageReader = ImageReader.newInstance(captureWidth, captureHeight, ImageFormat.JPEG, 1)
imageReader?.setOnImageAvailableListener(ImageAvailableCallback(), cameraHandler)
imageSurface = imageReader?.surface
val outputs = mutableListOf(previewSurface, imageSurface)
cameraDevice?.createCaptureSession(outputs, sessionStateCallback, mainHandler)
...after sessionStateConfigured
val requestBuilder = cameraDevice?.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)
requestBuilder?.addTarget(previewSurface!!)
val request = requestBuilder?.build()
cameraCaptureSession?.setRepeatingRequest(request!!, PreviewImageCallback(), mainHandler)
บันทึก:
// Start a capture session
cameraDevice?.createCaptureSession(listOf(previewSurface, mediaRecorder?.surface), RecordSessionStateCallback(), cameraHandler)
... after RecordSessionConfigured
val recordRequest = cameraDevice?.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
recordRequest?.addTarget(previewSurface!!);
recordRequest?.addTarget(mediaRecorder?.surface!!)
cameraRecordSession?.setRepeatingRequest(recordRequest?.build()!!, PreviewImageCallback(), cameraHandler)
เมื่อการกระทำบนDestroy:
cameraPreview?.surfaceTextureListener = null
cameraCaptureSession?.stopRepeating()
cameraCaptureSession?.close()
cameraDevice?.close()
cameraDevice = null