안드로이드에서 화면(디스플레이 스크린)을 녹화하기 방식을 검색하다보면 아래와 같은 구현 방식이 나온다.
아래와 같이 구현했을 경우, 녹화된 화면의 화질이 좋지 않았다.
MediaRecorder mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediaRecorder.setOutputFile(mReviewPath);
DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
mediaRecorder.setVideoSize(displayMetrics.widthPixels, displayMetrics.heightPixels);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setVideoEncodingBitRate(512 * 1000);
mediaRecorder.setVideoFrameRate(30);
그래서, 화질 개선을 위해서 검색을 해보니, 당연하게 보이는 VideoFrameRate, OuputFormat VideoEncodingBitRate 를 직접 바꿀 수도 있었다. 그러나 조금 더 심플한 방법도 있다는걸 알게되었다.
mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
setProfile() 함수를 사용할 경우 괜찮은 화질의 영상을 녹화시켜준다.
그리고 setProfile() 을 사용하기 위해서는 다음의 함수는 제거해줘야 한다. 또한 setProfile() 은 setVideoSize() 위에 배치되어야 한다.
- setOutputFormat()
- setVideoEncoder()
- setAudioEncoder();
- setVideoEncodingBitRate()
- setVideoFrameRate()
< 화면 녹화 최종 코드 >
MediaRecorder mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
mediaRecorder.setOutputFile(mReviewPath);
DisplayMetrics displayMetrics = Resources.getSystem().getDisplayMetrics();
mediaRecorder.setVideoSize(displayMetrics.widthPixels, displayMetrics.heightPixels);
반응형
'Dev > Android' 카테고리의 다른 글
[Java] 안드로이드 영상 원본 사이즈 가져오는 방법 (0) | 2019.06.25 |
---|---|
간단 기록 - AndroidX Core Dependency (0) | 2019.06.11 |
안드로이드 - Notification 갱신 (0) | 2019.03.26 |
Android Pie(9버전) 에서 Google Map 을 사용할 경우 만나는 에러 (0) | 2019.03.11 |
GoogleMap Marker 설정 - 현재위치 Icon 설정 (0) | 2019.02.20 |