안녕하세요, 저는 카메라 v2 API를 사용하여 라즈베리 파이 카메라 모듈을 사용하는 라즈베리 파이 3 장치를 사용하여 비디오를 녹화하려고합니다.안드로이드 비디오 레코더 : 표면을 얻지 못했습니다.
나는 이것을 Kotlin과 함께 안드로이드를 사용하여 개발 중이다.
내 비디오 녹화 코드는 다음과 같습니다.
override fun startRecording(videoCameraCallback: VideoCameraCallback) {
val cameraIdList = cameraManager.cameraIdList
cameraManager.openCamera(cameraIdList[0], cameraStateCalback, null)
Log.d("JJJ", "start recording called")
}
var cameraStateCalback = object : CameraDevice.StateCallback() {
override fun onOpened(camera: CameraDevice?) {
if (camera != null) {
Log.d("JJJ", "onOpened and will now create handler and capture session")
//create handler thread
val thread = HandlerThread("MyHandlerThread")
thread.start()
val handler = Handler(thread.looper)
//create capture session
val mediaRecorderSurface = setMediaOutputSurface()
val surfaces = ArrayList<Surface>()
surfaces.add(mediaRecorderSurface)
captureRequest = camera.createCaptureRequest(TEMPLATE_RECORD).build()
camera.createCaptureSession(surfaces, cameraCaptureSessionCallBack,handler)
Log.d("JJJ", "Created thread handler and capture session")
}
}
override fun onDisconnected(camera: CameraDevice?) {
Log.d("JJJ", "on disconnected")
}
override fun onError(camera: CameraDevice?, error: Int) {
Log.d("JJJ", "on error")
}
}
var cameraCaptureSessionCallBack = object : CameraCaptureSession.StateCallback(){
override fun onConfigureFailed(session: CameraCaptureSession?) {
Log.d("JJJ", "on configured failed")
}
override fun onConfigured(session: CameraCaptureSession?) {
Log.d("JJJ", "start recording")
mediaRecorder.start()
}
}
private fun setMediaOutputSurface(): Surface {
var file = File(context.filesDir.absolutePath)
if(file.canWrite() && file.canRead()){
Log.d("JJJ", "File location is fine")
}
mediaRecorder = MediaRecorder()
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE) //changed this to surface from camera and it fixed the cant get surface error
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264)
mediaRecorder.setVideoSize(600,600)
// mediaRecorder.setVideoEncodingBitRate(10000000)
// mediaRecorder.setVideoEncodingBitRate(512 * 1000)
mediaRecorder.setOutputFile(context.filesDir.absolutePath + "/"+System.currentTimeMillis() + ".mp4")
mediaRecorder.setVideoFrameRate(30)
mediaRecorder.prepare()
// mediaRecorder.start()
return mediaRecorder.surface
}
이 내 전략 카메라 ID의 카메라 관리자를 사용
- 가져 오기 목록입니다.
- 열기 목록에서 첫 번째 카메라 (
- 성공적으로 열 때 연결된 하나의 카메라가 필요한 모든 매개 변수를
mediaRecorder
만들기 핸들러 쓰레드에게 - 를 작성,이 (비디오 소스, 프레임 속도 등
- 표면 객체를 가져옵니다 비디오 녹화를 시작
mediaRecorder.start
전화, 미디어 플레이어에서 표면 이전에 성공적으로 구성에 - 을 만든 hanlder와 캡처 요청을 만들기
- (실패)를
mediaRecorder
에서.
내가 얻을 전체 스택 트레이스 오류는 다음과 같습니다 :
사전에12-01 09:58:23.981 8776-8776/com.jr.survailancedropboxcam W/CameraDevice-JV-0: Stream configuration failed due to: endConfigure:372: Camera 0: Unsupported set of inputs/outputs provided
12-01 09:58:23.985 8776-8958/com.jr.survailancedropboxcam D/JJJ: on configured failed
12-01 09:58:23.985 8776-8776/com.jr.survailancedropboxcam E/CameraCaptureSession: Session 0: Failed to create capture session; configuration failed
덕분에 당신은 카메라 V2 API를에게 사용할 수있는 최신 버전 (AndroidThings DP 6)와
이 업데이트는 무엇입니까? 나도 고생 중이야 – MobileMon
아직 일하지 않고있다. 누구든지 어떤 제안이 있습니까? – jonney
나는 라즈베리 파이에 관련된 문제를 깨달았다. https://developer.android.com/things/preview/releases.html의 안드로이드 용 릴리스 노트를 보면 나무 딸기 파이에 대한 알려진 문제가 있습니다. "카메라 : 하나 이상의 카메라로 새로운 CameraCaptureSession을 만들 수 없습니다 목표 출력 표면. " 내가 믿는 것은 우리가해야 할 일에서 우리를 성취하지 못하게하는 것입니다. 솔루션은 다른 보드를 구입하는 것이라고 생각합니다. – MobileMon