Merhaba Kameraya bağlı Raspberry Pi kamera modülünü kullanan Raspberry Pi 3 aygıtını kullanarak video kaydetmek için kamera v2 API'sini kullanmaya çalışıyorum.Android video kaydedici: yüzey alınamadı
Bunu Android Things ile Kotlin kullanarak geliştiriyorum.
Video kayıt kodumun nasıl göründüğü aşağıda açıklanmıştır.
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
}
Bu benim strateji Kamera Kimliği kamera yöneticisini kullanarak
- alın listesidir.
- Açık listeden birinci kamera (
- başarıyla açıldığında bağlı tek bir kamera gerekli tüm parametreleri ile
mediaRecorder
oluşturma işleyici konuyu - oluşturmak vardır (video kaynağı, kare hızı vb
- yüzey nesnesini alın Video kaydını başlatmak için
mediaRecorder.start
diyoruz, medya oynatıcı yüzeye ve daha önce başarıyla yapılandırıldı üzerinde - oluşturulan hanlder ile yakalama isteği oluşturun
- (başarısız)
mediaRecorder
den.
i olsun tam StackTrace hata aşağıdaki gibidir:
önceden12-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
teşekkürler Kamera v2 API'leri kullanabilirsiniz son sürümü (AndroidThings DP 6) ile
Bu konuda herhangi bir güncelleme var mı? Ben de mücadele ediyorum – MobileMon
Çalışmıyor. herhangi birinin önerisi varmı? – jonney
Ahududu pi'ye özgü bir konu olduğunu fark ettim. Ahududu pi için bilinen sorunlar altında, https://developer.android.com/things/preview/releases.html android şeyler için sürüm notlarına bakarsanız: "Kamera: Yeni bir CameraCaptureSession birden fazla ile oluşturulamaz." hedef çıkış yüzeyi. Benim inanıyorum ki, yapmamız gereken şeyden bizi elde etmemizi engelliyor. Bence çözüm farklı bir tahta satın almaktır. – MobileMon