You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redmi Note 11 Pro 5G调用MediaCodec.createPersistentInputSurface()报错

相机预览黑屏问题(Redmi Note 11 Pro 5G专属)

问题概述

仅在Redmi Note 11 Pro 5G机型上出现该问题,其Camera支持等级为LEVEL_3,表现为相机预览黑屏,捕获会话创建失败。

错误信息

Stream configuration failed due to: endConfigure:667: Camera 0: Unsupported set of inputs/outputs provided
2025-02-03 12:14:49.525  6817-7967  CameraCaptureSession      E  Session 0: Failed to create capture session; configuration failed

堆栈日志

025-02-03 12:14:49.000  6817-7688  libc                      W  Access denied finding property "vendor.camera.aux.packagelist"
2025-02-03 12:14:49.000  6817-7688  libc                      W  Access denied finding property "vendor.camera.aux.packagelistext"
2025-02-03 12:14:49.003  6817-7688  libc                      W  Access denied finding property "persist.vendor.camera.privapp.list"
2025-02-03 12:14:49.004  6817-7688  CameraExtImplXiaoMi       D  initCameraDevice: 0
2025-02-03 12:14:49.020  6817-7688  CameraManager             I  Open camera top activityName is <activity name>
2025-02-03 12:14:49.040  6817-7402  CameraManagerGlobal       E  Camera 4 is not available. Ignore physical camera status change
2025-02-03 12:14:49.172  6817-7402  CameraInjector            D  updateCloudCameraControllerInfoAsync: has aleardy start update task.
2025-02-03 12:14:49.172  6817-7402  CameraInjector            D  waitForResult: 
2025-02-03 12:14:49.172  6817-7402  libc                      W  Access denied finding property "vendor.camera.aux.packagelist"
2025-02-03 12:14:49.173  6817-7402  libc                      W  Access denied finding property "vendor.camera.aux.packagelistext"
2025-02-03 12:14:49.173  6817-7402  CameraManagerGlobal       W  ignore the torch status update of camera: 2
2025-02-03 12:14:49.173  6817-7402  CameraInjector            D  updateCloudCameraControllerInfoAsync: has aleardy start update task.
2025-02-03 12:14:49.173  6817-7402  CameraInjector            D  waitForResult: 
2025-02-03 12:14:49.173  6817-7402  libc                      W  Access denied finding property "vendor.camera.aux.packagelist"
2025-02-03 12:14:49.173  6817-7402  libc                      W  Access denied finding property "vendor.camera.aux.packagelistext"
2025-02-03 12:14:49.174  6817-7402  CameraManagerGlobal       W  ignore the torch status update of camera: 3
2025-02-03 12:14:49.174  6817-7402  CameraInjector            D  updateCloudCameraControllerInfoAsync: has aleardy start update task.
2025-02-03 12:14:49.174  6817-7402  CameraInjector            D  waitForResult: 
2025-02-03 12:14:49.174  6817-7402  libc                      W  Access denied finding property "vendor.camera.aux.packagelist"
2025-02-03 12:14:49.174  6817-7402  libc                      W  Access denied finding property "vendor.camera.aux.packagelistext"
2025-02-03 12:14:49.174  6817-7402  CameraManagerGlobal       W  ignore the torch status update of camera: 4
2025-02-03 12:14:49.175  6817-6835  CameraInjector            D  updateCloudCameraControllerInfoAsync: has aleardy start update task.
2025-02-03 12:14:49.175  6817-6835  CameraInjector            D  waitForResult: 
2025-02-03 12:14:49.175  6817-6835  libc                      W  Access denied finding property "vendor.camera.aux.packagelist"
2025-02-03 12:14:49.175  6817-6835  libc                      W  Access denied finding property "vendor.camera.aux.packagelistext"
2025-02-03 12:14:49.176  6817-6835  CameraManagerGlobal       W  ignore the torch status update of camera: 5
2025-02-03 12:14:49.314  6817-7688  BpBinder                  W  PerfMonitor binderTransact :  time=294ms interface=android.hardware.ICameraService code=4
2025-02-03 12:14:49.320  6817-7967  Camera2Controller         D  FPS range is [12, 30]
2025-02-03 12:14:49.409  6817-7967  CameraDevice-JV-0         D  waitUntilIdle: E. id = 0
2025-02-03 12:14:49.410  6817-7967  CameraDevice-JV-0         D  waitUntilIdle: X
2025-02-03 12:14:49.525  6817-7967  CameraDevice-JV-0         W  Stream configuration failed due to: endConfigure:667: Camera 0: Unsupported set of inputs/outputs provided
2025-02-03 12:14:49.525  6817-7967  CameraCaptureSession      E  Session 0: Failed to create capture session; configuration failed
2025-02-03 12:14:49.526  6817-7967  Camera2Con...iewSession   D  Configuration Failed

相关代码

private var recorderSurface: Surface? = null
private var previewReader: ImageReader? = null
private var captureReader: ImageReader? = null
private var cameraThread: HandlerThread? = null
private var cameraHandler: Handler? = null
private var mediaRecorder: MediaRecorder? = null

previewReader = ImageReader.newInstance(1920, 1080, ImageFormat.YUV_420_888, 5)
captureReader = ImageReader.newInstance(1920, 1080, ImageFormat.YUV_420_888, 5)
 
cameraThread = HandlerThread("Camera").also { it.start() }
cameraHandler = Handler(cameraThread.looper)

private fun createRecordRequest() {

    val recorderSurface = MediaCodec.createPersistentInputSurface()
    mediaRecorder = MediaRecorder().apply {
        setVideoSource(MediaRecorder.VideoSource.SURFACE)
        setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
        setOutputFile(context.cacheDir.path + "/file.mp4")
        setVideoEncoder(MediaRecorder.VideoEncoder.HEVC)
        setVideoEncodingBitRate(2_000_000)
        setVideoFrameRate(30)
        setVideoSize(1920, 1080)
        setInputSurface(recorderSurface)
        prepare()
        release()
    }
    
    this.recorderSurface = recorderSurface

}


private val stateCallback =
    object : CameraDevice.StateCallback() {
        override fun onOpened(cameraDevice: CameraDevice) {
            this@CameraController.cameraDevice = cameraDevice
            createRecordRequest()
            createCameraPreviewSession()
        }
    }



private fun openCamera() {
    //检查权限

    //传入相机ID
        val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager
        cameraManager.openCamera(cameraId, stateCallback, backgroundHandler)
}


private fun createCameraPreviewSession() {
    val surfaceList = mutableListOf<Surface>()
    previewReader?.surface?.let { surface -> surfaceList.add(surface) }
    captureReader?.surface?.let { surface -> surfaceList.add(surface) }

    //如果移除该行,报错就会消失,说明录制表面存在问题
    recorderSurface?.let { surface -> surfaceList.add(surface) }

    val previewRequestBuilder =
        cameraDevice!!.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)

    previewRequestBuilder.apply {
        addTarget(previewReader!!.surface)
        set(
            CaptureRequest.CONTROL_AE_MODE,
           CameraMetadata.CONTROL_AE_MODE_ON
            )
    }
    
    cameraDevice?.createCaptureSession(
        surfaceList,
        object : CameraCaptureSession.StateCallback() {
            override fun onConfigured(captureSession: CameraCaptureSession) {
                //后续执行配置步骤,但已失败
            }

            override fun onConfigureFailed(cameraCaptureSession: CameraCaptureSession) {
                //配置失败
                Timber.d("Configuration Failed")
            }
        },
        cameraHandler)
}

问题核心

创建捕获会话时添加recorderSurface会触发"Unsupported set of inputs/outputs provided"错误,移除该Surface则会话可正常创建,但无法进行视频录制,此问题仅存在于Redmi Note 11 Pro 5G机型。

解决方案建议

  1. 修复MediaRecorder资源释放时机
    当前代码中createRecordRequest内调用prepare()后立刻执行release(),会导致recorderSurface关联的MediaRecorder资源被提前释放,Surface处于无效状态。应将release()移至录制完成后的销毁逻辑中。

  2. 调整Surface组合与编码格式

    • 尝试将视频编码格式从HEVC(MediaRecorder.VideoEncoder.HEVC)改为H.264(MediaRecorder.VideoEncoder.H264),部分机型对HEVC的多Surface组合支持有限。
    • 检查相机支持的Stream组合:通过CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP获取相机允许的输入输出组合,确认同时添加两个YUV ImageReader和录制Surface是否在支持列表中。若不支持,可暂时移除captureReader验证是否能正常创建会话,再考虑后续优化。
  3. 动态添加录制Surface
    不在创建CaptureSession时添加recorderSurface,而是在需要开始录制时,通过captureSession.addOutputTarget(recorderSurface)动态添加;录制结束后调用captureSession.removeOutputTarget(recorderSurface)移除,避免启动时的组合不兼容问题。

内容的提问来源于stack exchange,提问作者Zysora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:30:55