Fixed: compat to recording screen

pull/209/head
xufuji456 3 years ago
parent 68ed6a1f57
commit 54d7f094bc
  1. 19
      AndroidMedia/src/main/java/com/frank/androidmedia/controller/MediaRecordController.kt

@ -5,8 +5,10 @@ import android.content.Intent
import android.hardware.Camera import android.hardware.Camera
import android.media.CamcorderProfile import android.media.CamcorderProfile
import android.media.MediaRecorder import android.media.MediaRecorder
import android.util.DisplayMetrics
import android.util.Log import android.util.Log
import android.view.Surface import android.view.Surface
import android.view.WindowManager
/** /**
* Using MediaRecorder to record a media file. * Using MediaRecorder to record a media file.
@ -20,6 +22,7 @@ open class MediaRecordController {
private var mCamera: Camera? = null private var mCamera: Camera? = null
private var mOutputPath: String? = null private var mOutputPath: String? = null
private var mMediaRecorder: MediaRecorder? = null private var mMediaRecorder: MediaRecorder? = null
private var mDisplayMetrics: DisplayMetrics? = null
private var mMediaProjectionController: MediaProjectionController? = null private var mMediaProjectionController: MediaProjectionController? = null
private fun initMediaRecord(videoSource: Int, surface: Surface?, outputPath: String) { private fun initMediaRecord(videoSource: Int, surface: Surface?, outputPath: String) {
@ -34,7 +37,8 @@ open class MediaRecordController {
// Note: pay attention to calling order // Note: pay attention to calling order
mMediaRecorder?.setVideoSource(videoSource) mMediaRecorder?.setVideoSource(videoSource)
mMediaRecorder?.setAudioSource(MediaRecorder.AudioSource.MIC) mMediaRecorder?.setAudioSource(MediaRecorder.AudioSource.MIC)
if (usingProfile) { if (usingProfile && (videoSource == MediaRecorder.VideoSource.CAMERA
|| videoSource == MediaRecorder.VideoSource.DEFAULT)) {
// QUALITY_480P QUALITY_720P QUALITY_1080P QUALITY_2160P // QUALITY_480P QUALITY_720P QUALITY_1080P QUALITY_2160P
val profile = CamcorderProfile.get(CamcorderProfile.QUALITY_720P) val profile = CamcorderProfile.get(CamcorderProfile.QUALITY_720P)
mMediaRecorder?.setProfile(profile) mMediaRecorder?.setProfile(profile)
@ -42,7 +46,7 @@ open class MediaRecordController {
mMediaRecorder?.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4) mMediaRecorder?.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
mMediaRecorder?.setAudioEncoder(MediaRecorder.AudioEncoder.AAC) mMediaRecorder?.setAudioEncoder(MediaRecorder.AudioEncoder.AAC)
mMediaRecorder?.setVideoEncoder(MediaRecorder.VideoEncoder.H264) mMediaRecorder?.setVideoEncoder(MediaRecorder.VideoEncoder.H264)
mMediaRecorder?.setVideoSize(640, 480) mMediaRecorder?.setVideoSize(mDisplayMetrics!!.widthPixels, mDisplayMetrics!!.heightPixels)
mMediaRecorder?.setVideoEncodingBitRate(5000 * 1000) mMediaRecorder?.setVideoEncodingBitRate(5000 * 1000)
mMediaRecorder?.setVideoFrameRate(25) mMediaRecorder?.setVideoFrameRate(25)
mMediaRecorder?.setAudioChannels(2) mMediaRecorder?.setAudioChannels(2)
@ -53,12 +57,16 @@ open class MediaRecordController {
|| videoSource == MediaRecorder.VideoSource.DEFAULT)) { || videoSource == MediaRecorder.VideoSource.DEFAULT)) {
mMediaRecorder?.setPreviewDisplay(surface) mMediaRecorder?.setPreviewDisplay(surface)
} }
try {
mMediaRecorder?.prepare()
} catch (e: Exception) {
Log.e("MediaRecorder", "prepare recorder error=$e")
}
} }
private fun startRecordInternal(videoSource: Int, surface: Surface?, outputPath: String) { private fun startRecordInternal(videoSource: Int, surface: Surface?, outputPath: String) {
initMediaRecord(videoSource, surface, outputPath) initMediaRecord(videoSource, surface, outputPath)
try { try {
mMediaRecorder?.prepare()
if (videoSource == MediaRecorder.VideoSource.SURFACE) { if (videoSource == MediaRecorder.VideoSource.SURFACE) {
mMediaProjectionController?.createVirtualDisplay(mMediaRecorder?.surface!!) mMediaProjectionController?.createVirtualDisplay(mMediaRecorder?.surface!!)
} }
@ -79,6 +87,9 @@ open class MediaRecordController {
fun startRecord(videoSource: Int, surface: Surface?, context: Context, outputPath: String) { fun startRecord(videoSource: Int, surface: Surface?, context: Context, outputPath: String) {
if (mMediaRecorder == null) { if (mMediaRecorder == null) {
mMediaRecorder = MediaRecorder() mMediaRecorder = MediaRecorder()
val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
mDisplayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(mDisplayMetrics)
} }
if (videoSource == MediaRecorder.VideoSource.SURFACE) { if (videoSource == MediaRecorder.VideoSource.SURFACE) {
@ -113,7 +124,7 @@ open class MediaRecordController {
fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
if (requestCode == mMediaProjectionController?.getRequestCode()) { if (requestCode == mMediaProjectionController?.getRequestCode()) {
mMediaProjectionController?.onActivityResult(resultCode, data) mMediaProjectionController?.onActivityResult(resultCode, data)
startRecordInternal(MediaRecorder.VideoSource.SURFACE, mMediaRecorder?.surface, mOutputPath!!) startRecordInternal(MediaRecorder.VideoSource.SURFACE, null, mOutputPath!!)
} }
} }

Loading…
Cancel
Save