flutter_wechat_camera_picker icon indicating copy to clipboard operation
flutter_wechat_camera_picker copied to clipboard

[BUG] Failed to record with the maximum resolution on some devices

Open JohnsonCYS opened this issue 3 years ago • 8 comments

Describe the bug

使用版本wechat_camera_picker: ^3.4.0

在Xiaomi MI 5X(Android 8.1.0)和Redmi Note4X(Android 7.0)设备上无法正常录制视频,报错:

 Playback error
      com.google.android.exoplayer2.ExoPlaybackException: Source error
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:641)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:611)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:176)
        at android.os.HandlerThread.run(HandlerThread.java:65)
     Caused by: com.google.android.exoplayer2.source.UnrecognizedInputFormatException: None of the available extractors (FragmentedMp4Extractor, Mp4Extractor, FlvExtractor, FlacExtractor, WavExtractor, AmrExtractor, PsExtractor, OggExtractor, TsExtractor, MatroskaExtractor, AdtsExtractor, Ac3Extractor, Ac4Extractor, Mp3Extractor, JpegExtractor) could read the stream.
        at com.google.android.exoplayer2.source.BundledExtractorsAdapter.init(BundledExtractorsAdapter.java:92)
        at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1020)
        at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:412)

[CameraPicker - LOG] Error when initializing video controller: PlatformException(VideoError, Video player had error com.google.android.exoplayer2.ExoPlaybackException: Source error, null, null)
I/flutter (32691): ┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
I/flutter (32691): │ #0   LoggerUtil.e (package:open_im_demo/utils/logger.dart:31:13)
I/flutter (32691): │ #1   main.<anonymous closure> (package:open_im_demo/main.dart:22:18)
I/flutter (32691): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
I/flutter (32691): │ ⛔ StackTrace :  #0      handleErrorWithHandler (package:wechat_camera_picker/src/internals/methods.dart:28:3)
I/flutter (32691): │ ⛔ #1      _CameraPickerViewerState.initializeVideoPlayerController (package:wechat_camera_picker/src/widgets/camera_picker_viewer.dart:173:7)
I/flutter (32691): │ ⛔ <asynchronous suspension>
I/flutter (32691): │ ⛔ 
I/flutter (32691): └───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

目前,在另一台oppo手机上是可以正常录制视频,怀疑是小米手机或者小米低端机的兼容型问题

JohnsonCYS avatar Jul 08 '22 08:07 JohnsonCYS

测试官方camera后确认是否有同样问题。

AlexV525 avatar Jul 08 '22 15:07 AlexV525

测试github一个使用camera 的demo(https://github.com/sbis04/flutter_camera_demo) ,在Xiaomi MI 5X(Android 8.1.0)设备上是可以正常录制视频,应该可以排查官方camera的问题。

JohnsonCYS avatar Jul 17 '22 07:07 JohnsonCYS

确认是否和 #104 为同一个问题。

AlexV525 avatar Jul 17 '22 07:07 AlexV525

这边应该是排查到问题了,默认CameraPickerConfig里面设置的采样率是ResolutionPreset.max,在小米设备上用camera录制的视频文件本身就会有问题。如果我指定在小米设备上采样率是ResolutionPreset.medium,那么可以正常使用了。

JohnsonCYS avatar Jul 17 '22 09:07 JohnsonCYS

可以使用 demo 运行 flutter run -v 将从运行到出现错误的完整日志保存为 txt 后赋于此处,我再将问题进行反馈。

AlexV525 avatar Jul 17 '22 09:07 AlexV525

基于flutter_wechat_camera_picker项目demo抓取的两份日志,flutter_log.txt是执行flutter run -v命令抓取的,android_studio_log.txt是在android studio控制台抓取的 flutter_log.txtandroid_studio_log.txt

里面有个报错是说设置分辨率出错了:/CameraDevice-0-LE(15346): Surface with size (w=3840, h=2160) and format 0x22 is not valid, size not in valid set: [1440x1080, 1280x960, 1280x720, 1280x640, 864x480, 640x640, 800x480, 720x480, 768x432, 640x480, 480x640, 576x432, 640x360, 480x360, 480x320, 384x288, 352x288, 320x240, 240x320, 240x160, 176x144, 144x176, 160x120]

JohnsonCYS avatar Jul 17 '22 11:07 JohnsonCYS

我是用小米X5手机进行拍摄也出现了同样的问题。

bridfish avatar Jul 26 '22 07:07 bridfish

通小米5X无法拍摄

W/MediaAnalyticsItem(28867): Unable to record: (codec:0:-1:-11:0:10:android.media.mediacodec.codec=OMX.qcom.video.decoder.avc:android.media.mediacodec.mode=video:android.media.mediacodec.secure=0:android.media.mediacodec.width=320:android.media.mediacodec.height=240:android.media.mediacodec.rotation-degrees=90:android.media.mediacodec.maxwidth=320:android.media.mediacodec.maxheight=240:android.media.mediacodec.mime=video/avc:android.media.mediacodec.bytesin=39673:) [forcenew=0] W/MediaAnalyticsItem(28867): Unable to record: (codec:0:-1:-11:0:5:android.media.mediacodec.codec=OMX.google.aac.decoder:android.media.mediacodec.mode=audio:android.media.mediacodec.secure=0:android.media.mediacodec.mime=audio/mp4a-latm:android.media.mediacodec.bytesin=6402:) [forcenew=0]

joker-fu avatar Sep 09 '22 07:09 joker-fu

这边应该是排查到问题了,默认CameraPickerConfig里面设置的采样率是ResolutionPreset.max,在小米设备上用camera录制的视频文件本身就会有问题。如果我指定在小米设备上采样率是ResolutionPreset.medium,那么可以正常使用了。

你好,请问你是根据什么条件判断使用medium还是max。手机品牌吗?

hrxiang avatar Oct 26 '22 02:10 hrxiang