Взять этот блок примера кода:
// from window manager
val recordWidth = screenWidth
val recordHeight = screenHeight
val projection: MediaProjection = // retrieved from API
val mediaRecorder = MediaRecorder().apply {
setVideoSource(SURFACE)
setOutputFormat(MPEG_4)
setVideoFrameRate(frameRate) // e.g. 30
setVideoEncoder(H264)
setVideoSize(recordWidth, recordHeight)
setVideoEncodingBitRate(videoBitRate)
setOutputFile(outputFile)
prepare()
}
val virtualDisplay: VirtualDisplay = projection?.createVirtualDisplay(
"Example",
screenWidth,
screenHeight,
screenDensity,
VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
mediaRecorder.surface,
null,
null
)
mediaRecorder.start()
Это все работает хорошо, если screenWidth и screenHeight соответствуют показаниям дисплея.
Если я изменю recordWidth и recordHeight (которые передаются в MediaRecorder
с setVideoSize(Int, Int)
), то все идет не так. Записанное видео обычно содержит только верхнюю левую часть общего экрана.
Итак, мои основные вопросы:
- Нужно ли что-то особенное сделать дляуменьшить разрешение при записи экрана?Даже если я сохраню соотношение сторон экрана, оно не будет работать.
- Некоторые значения ширины / высоты вызывают сбой - есть ли API для получения поддерживаемых размеров записи экрана?Я знаю, что
Camera
предоставляет один, но на самом деле он не использует API-интерфейсы камеры.