Android MediaRecorder kotlin запись видео с лучшим качеством - PullRequest
0 голосов
/ 15 января 2020

Привет, можешь мне помочь? я хочу записать мой android экран, код работает, но качество видео плохое
код

try {
        mediaRecoder!!.setAudioSource(MediaRecorder.AudioSource.MIC)
        mediaRecoder!!.setVideoSource(MediaRecorder.VideoSource.SURFACE)
        mediaRecoder!!.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)
        videoUri = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
            .toString()+ StringBuilder("/")
            .append(SimpleDateFormat("dd-MM-yyyy-hh_mm_ss").format(Date()))
            .append(".mp4")
            .toString()
        mediaRecoder!!.setOutputFile(videoUri)
        mediaRecoder!!.setVideoSize(DISPLAY_WIDTH, DISPLAY_WIDTH )
        mediaRecoder!!.setVideoEncoder(MediaRecorder.VideoEncoder.H264)
        mediaRecoder!!.setVideoEncodingBitRate(15000000)
        mediaRecoder!!.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
        mediaRecoder!!.setVideoEncodingBitRate(1280*720)
        mediaRecoder!!.setVideoFrameRate(30)
        val rotation = windowManager.defaultDisplay.rotation
        val orientation = ORIENTATION.get(rotation+90)
        mediaRecoder!!.setOrientationHint(orientation)
        mediaRecoder!!.prepare()
    }catch (e : IOException)
    {
        e.printStackTrace()
    }

спасибо

1 Ответ

0 голосов
/ 15 января 2020

Вы устанавливаете битрейт кодирования видео 2 раза, и, наконец, он устанавливает битрейт 921600.

mediaRecoder!!.setVideoEncodingBitRate(15000000) // HERE
mediaRecoder!!.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
mediaRecoder!!.setVideoEncodingBitRate(1280*720) // AND HERE

Установите один раз, например, 3 миллиона:

mediaRecoder!!.setVideoEncodingBitRate(3000000)

И небольшой совет: не используйте object!!.method() или object?.method() так много. Старайтесь избегать его как можно чаще, поскольку он идет вразрез с одной из основных Kotlin функций - нулевой безопасностью, а также делает ваш код довольно трудным для чтения. Почему бы вам не написать вместо этого mediaRecorder?.let{...}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...