0

I am trying to record 2 video feeds simultaneously. I am able to get 2 feeds and am able to get pictures from 2 cameras simultaneously as well. I am trying to get video feeds from these 2 cameras, but is it even possible?

I set up two media recorders (one for each camera).

fun setupNormalMediaRecorder(activity: MainActivity, params: CameraParams){
    params.mediaNormalRecorder.apply {
        setAudioSource(MediaRecorder.AudioSource.CAMCORDER)
        setVideoSource(MediaRecorder.VideoSource.SURFACE)
        setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_720P))

     setOutputFile(activity.getOutputMediaFileUri("Normal").toString())
        prepare()
    }
}

fun setupWideMediaRecorder(activity: MainActivity, params: CameraParams){
    params.mediaWideRecorder.apply {
        setAudioSource(MediaRecorder.AudioSource.CAMCORDER)
        setVideoSource(MediaRecorder.VideoSource.SURFACE)
        setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_720P))

     setOutputFile(activity.getOutputMediaFileUri("Wide").toString())
        prepare()
    }
}

Then I set up two recording sessions.

fun startNormalRecordingSession(activity: MainActivity, params: CameraParams){
        recordNormalSession(activity, params)
    }

fun startWideRecordingSession(activity: MainActivity, params: CameraParams){
        recordWideSession(activity, params)
    }

fun stopNormalRecordingSession(activity: MainActivity, params: CameraParams){
        stopNormalMediaRecorder(activity, params)
    }

fun stopWideRecordingSession(activity: MainActivity, params: CameraParams){
        stopWideMediaRecorder(activity, params)
    }

This is the code to save the two feeds.

fun getOutputMediaFileUri(name: String): Uri {
        //requestRuntimePermission()
        return Uri.fromFile(getOutputMediaFile(type, name))
    }
fun getOutputMediaFile(name: String): File {
val mediaStorageDir = File(getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS), "TwoCameraFeed")
        if (!mediaStorageDir.exists()){
            if (!mediaStorageDir.mkdirs()){
                Log.d("MyCameraApp", "Failed To Create Directory!")
            }
        }
        val timeStamp = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())

         var mediaFile = File(mediaStorageDir.getPath() + separator + "VID_$name" + timeStamp + ".mp4")
        return mediaFile
    }

Then I start both the recordings when the button is pressed. This is how I tried it.

 button.setOnClickListener {
            if(isRecording){
                isRecording = false
                stopWideRecordingSession(activity, params)
                stopNormalRecordingSession(activity, params)
                restartActivity()
            }else{
                button.text = "Stop"
                twoLens.reset()
                twoLens.isTwoLensShot = true
                MainActivity.cameraParams.get(dualCamLogicalId).let{
                    if(it?.isOpen == true){
                        isRecording = true
                        startWideRecordingSession(activity, params)
                        startNormalRecordingSession(activity, params)
                    }
                }
            }
        }

However, when I run this, I keep on getting the following error.

2019-06-28 15:44:22.633 5997-5997/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.dualcameratets, PID: 5997
    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:534)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958) 
     Caused by: java.io.FileNotFoundException: file:/storage/emulated/0/Download/TwoCameraImages/VID_Wide20190628_154422.mp4: open failed: ENOENT (No such file or directory)
        at libcore.io.IoBridge.open(IoBridge.java:485)
        at java.io.RandomAccessFile.<init>(RandomAccessFile.java:288)
        at java.io.RandomAccessFile.<init>(RandomAccessFile.java:151)
        at android.hsm.HwMediaPermWrapper.setOutputFile(HwMediaPermWrapper.java:127)
        at android.media.MediaRecorder.prepare(MediaRecorder.java:1026)
        at com.example.dualcameratets.CameraUtilsKt.setupWideMediaRecorder(CameraUtils.kt:372)
        at com.example.dualcameratets.Camera2ControllerKt.recordWideSession(Camera2Controller.kt:70)
        at com.example.dualcameratets.MainActivity.startWideRecordingSession(MainActivity.kt:320)
        at com.example.dualcameratets.MainActivity$onCreate$1.onClick(MainActivity.kt:81)
        at android.view.View.performClick(View.java:6652)
        at android.view.View.performClickInternal(View.java:6624)
        at android.view.View.access$3100(View.java:787)
        at android.view.View$PerformClick.run(View.java:26213)
        at android.os.Handler.handleCallback(Handler.java:891)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:207)
        at android.app.ActivityThread.main(ActivityThread.java:7470)
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958) 
     Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
        at libcore.io.Linux.open(Native Method)
        at libcore.io.BlockGuardOs.open(BlockGuardOs.java:210)
        at libcore.io.IoBridge.open(IoBridge.java:471)

It says no such file or directory which is a bit strange since the folder is being made, but it never records any feed. Any suggestion?

  • You might get it working on some devices- https://stackoverflow.com/questions/12382322/is-it-possible-to-use-front-and-back-camera-at-same-time-in-android – HB. Jun 28 '19 at 13:04
  • The stream works fine. I am using Huawei Mate20Pro. Even the picture capture works, the issue is with video recording. – Kamran Janjua Jun 28 '19 at 13:08
  • Like I said, you might get it working on some devices. – HB. Jun 28 '19 at 13:13

0 Answers0