Dev/Android

Android 화면 레코딩 방법 - MediaRecorder

healthyryu 2019. 6. 10. 18:21

 

안드로이드에서 화면(디스플레이 스크린)을 녹화하기 방식을 검색하다보면 아래와 같은 구현 방식이 나온다.

아래와 같이 구현했을 경우, 녹화된 화면의 화질이 좋지 않았다.

 

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); 

 

참고 : https://stackoverflow.com/a/7814878/3897810

반응형