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

Loading…
Cancel
Save