Xin chào Tôi đang cố gắng sử dụng API camera v2 để quay video bằng thiết bị Raspberry Pi 3 sử dụng mô-đun camera Raspberry Pi gắn với nó.Trình quay video trên Android: không nhận được bề mặt
Tôi đang phát triển ứng dụng này bằng Android Things with Kotlin.
Dưới đây là cách mã quay video của tôi trông như thế nào.
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
}
Đây là chiến lược của tôi
- danh sách Nhận Camera ID bằng cách sử dụng quản lý máy ảnh.
- Mở camera đầu tiên trong danh sách (chỉ có một camera gắn
- khi mở ra thành công, tạo handler chủ đề
- Tạo
mediaRecorder
với tất cả các thông số cần thiết (nguồn video, tốc độ khung hình vv - Lấy đối tượng bề mặt từ
mediaRecorder
(nơi nó không thành công) - Tạo yêu cầu chụp với bề mặt từ các máy nghe nhạc phương tiện truyền thông và các hanlder tạo trước
- trên cấu hình thành công, hãy gọi
mediaRecorder.start
để bắt đầu ghi video.
Các lỗi stacktrace đầy đủ tôi nhận được là dưới đây:
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
Cảm ơn trước
Mọi cập nhật về điều này? Tôi đang đấu tranh quá – MobileMon
Không làm việc stil. bất cứ ai có bất cứ đề nghị? – jonney
Tôi nhận ra một vấn đề cụ thể với mâm xôi pi. Nếu bạn nhìn vào các ghi chú phát hành cho những thứ android https://developer.android.com/things/preview/releases.html, dưới các vấn đề đã biết cho mâm xôi pi có: "Camera: Một CameraCaptureSession mới không thể được tạo ra với nhiều hơn một mục tiêu bề mặt đầu ra. Điều tôi tin là ngăn cản chúng ta hoàn thành chúng ta từ những gì chúng ta cần làm. Tôi nghĩ rằng giải pháp là để mua một bảng khác nhau – MobileMon