Android preview processing while video recording

前端 未结 4 1396
遇见更好的自我
遇见更好的自我 2020-12-14 13:17

I am using Android development (SDK 2.2) and I would like to make a video recording with mediaRecorder and, at the same time, do some process on each preview fr

相关标签:
4条回答
  • 2020-12-14 13:59

    You just add tag to your manifest file .Thus it will work.Sample code shown below.

    eg:-

       </application>
        <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.RECORD_VIDEO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        ***<uses-feature android:name="android.hardware.camera" />***
    </manifest>
    
    0 讨论(0)
  • 2020-12-14 14:00

    you cannot access the video stream while recording, onPreviewFrame will not get called once you start recording. Oddly, onPreviewFrame does not seem to get called after you record either...

    0 讨论(0)
  • 2020-12-14 14:03

    Eureka! The trick is to attach your PreviewCallback in the surfaceChanged(...) SurfaceHolder.Callback! After doing this, you'll continue to get preview frame data after a MediaRecorder is running!

    For example:

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        mCamera.setPreviewCallback(new PreviewCallback() {
                public void onPreviewFrame(byte[] _data, Camera _camera) {
                    Log.d("onPreviewFrame-surfaceChanged",String.format("Got %d bytes of camera data", _data.length));
                }
            });
    
    }
    
    0 讨论(0)
  • 2020-12-14 14:08

    if you are using os 2.2 or higher then use this method your prepare failed and other exception will removed

     public boolean startRecording() {
        try {
            camera.unlock();
    
            mediaRecorder = new MediaRecorder();
            mediaRecorder.setCamera(camera);
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
            mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
            mediaRecorder.setProfile(CamcorderProfile
                    .get(CamcorderProfile.QUALITY_HIGH));
    
            File tempFile = new File(getOutputMediaFile(MEDIA_TYPE_VIDEO)
                    .toString());
    
            mediaRecorder.setOutputFile(tempFile.getPath());
            mediaRecorder.setVideoFrameRate(videoFramesPerSecond);
            mediaRecorder.setVideoSize(surfaceView.getWidth(),
                    surfaceView.getHeight());
            mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
            mediaRecorder.setMaxFileSize(maxFileSizeInBytes);
            mediaRecorder.prepare();
            mediaRecorder.start();
    
            return true;
        } catch (IllegalStateException e) {
            Log.e(TAG, e.getMessage());
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            Log.e(TAG, e.getMessage());
            e.printStackTrace();
            return false;
        }
    }
    
    0 讨论(0)
提交回复
热议问题