Sebagian besar saya ingin tahu apakah ada konflik mendasar karena saya tidak dapat berbagi sumber daya yang sama dengan perpustakaan, jika demikian, saya perlu mengambil pendekatan yang berbeda.
Sasaran saya adalah memiliki video berkualitas rendah dengan data meta detektor yang disimpan pada saat yang sama, sehingga saya dapat melakukan beberapa pemrosesan pasca dan pemotongan tanpa banyak penundaan.
Berdasarkan CameraDetectorDemo - detektor kamera
Saya telah menginisialisasi MediaRecorder, tetapi ini menyimpan layar hitam jika saya memulainya sebelum detektor, dan crash saat mulai (dengan kode -19) jika saya memulainya setelah detektor. Detektor melampirkan pratinjau, mungkin ada hubungannya dengan itu.
Saya menambahkan beberapa tombol untuk mengontrol fungsi-fungsi ini:
protected void cameraInit() {
String state = Environment.getExternalStorageState();
if (!Environment.MEDIA_MOUNTED.equals(state)) {
Log.d(LOG_TAG, "Drive not mounted - cannot write video");
return;
}
File file = new File(getExternalFilesDir(Environment.DIRECTORY_MOVIES), "demo.gp3");
Log.d(LOG_TAG, String.format("Camera Initializing. Setting output to: %s", file.getAbsolutePath()));
// Set sources
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// Set profile
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));
// Set output profile
recorder.setOutputFile(file.getAbsolutePath());
// Set preview output
recorder.setPreviewDisplay(cameraPreview.getHolder().getSurface());
try {
this.recorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "IO exception on camera Initialization");
e.printStackTrace();
} catch (IllegalStateException e) {
// This is thrown if the previous calls are not called with the
// proper order
Log.e(LOG_TAG, "Failed to initialize things properly :( ");
e.printStackTrace();
}
}
protected void cameraStart() {
Log.d(LOG_TAG, "Camera Start");
this.recorder.start();
}
protected void cameraStop() {
Log.d(LOG_TAG, "Camera Stop");
this.recorder.stop();
}