以这个示例代码块为例:
// 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
with setVideoSize(Int, Int)
),那么一切都会出错。录制的视频往往只包含整个屏幕的左上角。
所以我的主要问题:
- 录制屏幕时是否需要做一些特别的事情来降低分辨率?即使我保持与屏幕的纵横比,它似乎也不起作用。
- 某些宽度/高度值会导致崩溃 - 是否有用于检索支持的屏幕录制大小的 API?我知道
Camera
提供了一个,但这并不是真正使用相机 API。