【问题标题】:MediaRecorder rotating SurfaceView to match screen orientationMediaRecorder 旋转 SurfaceView 以匹配屏幕方向
【发布时间】:2017-09-17 06:45:44
【问题描述】:

我目前正在尝试使用媒体记录器创建视频记录器。视频的方向逆时针旋转 90 度(基本上是横向模式)。我希望它能够在纵向视图中拍摄视频。

您可以从我的代码中看到,我并没有直接调用 Camera 变量来设置媒体记录器,因为它表明该代码已被弃用。谁能帮帮我。

我的代码如下:

public void recordVideo() {
    isRecording = false;
    mediaRecorder = new MediaRecorder();
    initMediaRecorder();

    //recorderView is my surfaceView//
    surfaceHolder = recorderView.getHolder();
    surfaceHolder.addCallback(surfaceCallback);
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    toggleRecordButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isRecording) {
                mediaRecorder.stop();
                timer.cancel();
                mediaRecorder.release();
                toggleRecordButton.setText("START");

                mediaRecorderLayout.setVisibility(View.GONE);
                mPictureHelper.fetchCompressedUri(Environment.getExternalStorageDirectory().getPath() + "/myVideo.mp4");
            } else {
                seconds = 0;
                mediaRecorder.start();
                timer = new Timer();
                timer.scheduleAtFixedRate(new TimerTask() {
                    @Override
                    public void run() {
                        getActivity().runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                if (seconds < 10) {
                                    tvTimer.setText("00:0" + seconds);
                                } else {
                                    tvTimer.setText("00:" + seconds);
                                }
                                seconds++;
                            }
                        });
                    }
                }, 0, 1000);
                isRecording = true;
                toggleRecordButton.setText("STOP");
            }
        }
    });
}
private void initMediaRecorder() {
    String path = Environment.getExternalStorageDirectory().getPath() + "/myVideo.mp4";

    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    CamcorderProfile camcorderProfile_HQ = CamcorderProfile.get(CamcorderProfile.QUALITY_480P);
    mediaRecorder.setProfile(camcorderProfile_HQ);
    mediaRecorder.setOutputFile(path);

    mediaRecorder.setMaxDuration(60000); // Set max duration 60 sec.
    mediaRecorder.setMaxFileSize(10000000);
}
SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        prepareMediaRecorder();
    }
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    }
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    }
};
private void prepareMediaRecorder() {
    mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
    try {
        mediaRecorder.prepare();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

我已经查看了有关此的其他帖子,但它们似乎都已过时,因为许多过去使用的代码现在已被弃用。我希望有人可以提供帮助。

【问题讨论】:

    标签: android android-mediarecorder


    【解决方案1】:

    在 manifest.xml 中添加这个

    <activity
            android:name=".activity_class_name"
            android:screenOrientation="portrait" />
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多