为什么Android相机流传输时日志提示Invalid format错误?
错误产生原因
报错代码0x21对应Android系统原生ImageFormat.JPEG常量值,出现该错误的核心原因是:CameraController的startImageStream方法在Android平台仅支持接收YUV系列格式的帧数据,你当前的配置给Android端指定了ImageFormatGroup.jpeg作为输出格式,系统在尝试解析YUV平面信息时识别到传入的是JPEG格式,不符合预期就抛出了该错误。
解决方案
- 调整相机控制器的
imageFormatGroup配置,将Android端的输出格式改为YUV系列格式即可,修改后的代码如下:
_controller = CameraController(cameras[0], ResolutionPreset.ultraHigh, imageFormatGroup: Platform.isAndroid ? ImageFormatGroup.yuv420 // Android端使用YUV格式适配流传输 : ImageFormatGroup.yuv420); // iOS端可根据业务需求保留原有配置或统一使用YUV
- 如果你的业务需要获取JPEG格式的图片,不要依赖
startImageStream返回的帧直接得到JPEG,可选择两种方案处理:- 不使用流接口,改用
takePicture方法直接获取JPEG格式的拍摄结果 - 保留YUV格式的流配置,自行在代码中增加YUV转JPEG的逻辑实现格式转换
- 不使用流接口,改用
- 若部分低端安卓机型使用
yuv420仍出现兼容性问题,可将Android端格式替换为ImageFormatGroup.nv21,该格式在安卓平台的适配性更广,同样支持startImageStream接口。
内容的提问来源于stack exchange,提问作者Mina Ayad
相关产品推荐
相关产品推荐

