Я пытаюсь снять видеопоток с камеры на смарт-очки без использования предварительного просмотра. В целях тестирования я пытаюсь записать захваченное видео во внутреннюю память смарт-очков, но пока безуспешно. Я пробовал так много вещей, чтобы заставить MediaRecorder работать на моих умных очках Vuzix Blade, но я продолжаю получать исключения и сбои. Я не использую предварительный просмотр камеры, так как приложение позволяет распознавать объекты и возвращать имя объекта на экране.
public boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
private Camera getCameraInstance() throws IOException {
if (checkCameraHardware(context)) {
try {
return Camera.open();
// Attempt to get a camera instance
} catch (Exception e) {
// Camera is not available
Log.e("Camera", "No camera available.");
}
}
throw new InvalidObjectException("Camera not available.");
}
void recordVideo() throws IOException {
String file_path= context.getApplicationContext().getFilesDir().getPath();
File file = new File(file_path);
if (!file.exists()){
file.mkdirs();
}
String file_name = file + "test.3gp";
Camera camera = getCameraInstance();
camera.unlock();
mediaRecorder = new MediaRecorder();
mediaRecorder.setCamera(camera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
mediaRecorder.setProfile(cpHigh);
mediaRecorder.setOutputFile(file_name);
try {
mediaRecorder.prepare();
} catch (IllegalStateException e) {
//e.printStackTrace();
Log.w("MediaRecorder", "Can't prepare MediaRecorder");
finish();
}
mediaRecorder.start();
}
void finish() {
mediaRecorder.stop();
}
}
Манифест имеет следующие разрешения:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
Следующий код является трассировкой стека:
04-01 18:10:50.611 3881-3881/nl.queensland2.smartglasses E/AndroidRuntime: FATAL EXCEPTION: main
Process: nl.queensland2.smartglasses, PID: 3881
java.lang.IllegalStateException
at android.media.MediaRecorder.start(Native Method)
at nl.queensland2.smartglasses.CameraHandler.recordVideo(CameraHandler.java:78)
at nl.queensland2.smartglasses.MainActivity.startCamera(MainActivity.java:47)
at nl.queensland2.smartglasses.MainActivity.onStartButton(MainActivity.java:18)
at nl.queensland2.smartglasses.-$$Lambda$KXk0yJI_VzEUWeY3qtg9yXybkUM.onClick(lambda)
at android.view.View.performClick(View.java:4780)
at android.view.View.onKeyUp(View.java:9023)
at android.widget.TextView.onKeyUp(TextView.java:5899)
at android.view.KeyEvent.dispatch(KeyEvent.java:2643)
at android.view.View.dispatchKeyEvent(View.java:8411)
at android.widget.TextView.dispatchKeyEvent(TextView.java:9531)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1495)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1495)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1495)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1495)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1495)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1495)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2365)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1713)
at androidx.core.view.KeyEventDispatcher.activitySuperDispatchKeyEventPre28(KeyEventDispatcher.java:130)
at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:87)
at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:133)
at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:558)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:2814)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2280)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4023)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3985)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3547)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3600)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3566)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3683)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3574)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3740)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3547)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3600)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3566)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3574)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3547)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3600)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3566)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3716)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3877)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2208)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1849)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1840)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2185)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:143)
at android.os.Looper.loop(
Кто-нибудь видит, в чем проблема?