I am developing an app to take short videos using the rear or back camera. I am using the camera2 object in xamarin.android. I am able to select the rear lens and open the camera like below:
// Create an instance of CameraManager
CameraManager manager = (CameraManager)Android.App.Application.Context.GetSystemService(Context.CameraService);
string cameraId = null;
// Get the ID of the back-facing camera
App.cameraId = manager.GetCameraIdList().FirstOrDefault(id => (int)manager.GetCameraCharacteristics(id).Get(CameraCharacteristics.LensFacing) == (int)LensFacing.Back);
// Create an instance of CameraDevice
CameraDevice cameraDevice = null;
manager.OpenCamera(cameraId, new MyCameraDeviceStateCallback(this), null);
Now, I created an instance of MediaRecorder object and set it up as below:
// Create a new instance of MediaRecorder
MediaRecorder mediaRecorder = new MediaRecorder();
// Set the video source to the camera
mediaRecorder.SetVideoSource(VideoSource.Camera);
// Set the output format and file path
mediaRecorder.SetOutputFormat(OutputFormat.Default);
mediaRecorder.SetOutputFile(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal).ToString() + "/video.mp4");
// Set the video encoder
mediaRecorder.SetVideoEncoder(VideoEncoder.Default);
// Prepare and start recording
mediaRecorder.Prepare();
mediaRecorder.Start();
However, anytime I debug the app to mediaRecorder.Start(), I hear a loud sound (from the speakers) and after a second or two the error above pops up.
This is the complete error stack trace:
$exception {Java.Lang.RuntimeException: start failed. at Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod(Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00068] in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/obj/Release/JniEnvironment.g.cs:11884 at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00030] in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniInstanceMethods_Invoke.cs:66 at Android.Media.MediaRecorder.Start () [0x00000] in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-33/mcw/Android.Media.MediaRecorder.cs:2440 at IMEI247_Tracker.Droid.MyBroadcastReceiver2.RecordVideoWithoutAudio () [0x0003c] in F:\MobileApps\Customized\Others\IMEITracker\IMEITracker.Android\MyBroadcastReceiver2.cs:4346 at IMEI247_Tracker.Droid.MyBroadcastReceiver2.TakeAVideo3 () [0x000f3] in F:\MobileApps\Customized\Others\IMEITracker\IMEITracker.Android\MyBroadcastReceiver2.cs:4229 at IMEI247_Tracker.Droid.MyBroadcastReceiver2.b__18_7 () [0x00005] in F:\MobileApps\Customized\Others\IMEITracker\IMEITracker.Android\MyBroadcastReceiver2.cs:520 at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00014] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/threading/thread.cs:74 at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00071] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs:968 at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs:910 at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x0002b] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/threading/executioncontext.cs:899 at System.Threading.ThreadHelper.ThreadStart () [0x00008] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/threading/thread.cs:111 --- End of managed Java.Lang.RuntimeException stack trace --- java.lang.RuntimeException: start failed. at android.media.MediaRecorder.start(Native Method) } Java.Lang.RuntimeException
I am using a Techno Spark 4 Android 9 phone for testing my app.
So, what is really the issue and how do I resolve it?