为什么 Android OS-10 中的 ExoPlayer 在预览时显示黑色预览屏幕

Why ExoPlayer in Android OS-10 shows black preview screen while preview

我正在使用 Exoplayer 以横向模式录制视频并以纵向模式显示预览,同时连续录制视频,同时改变方向,反之亦然一旦播放器预览显示空白屏幕。 我正在使用 Exoplayer 2.9.6 作为 Gradle 的依赖项并使用 android OS 版本 10。

E/BufferQueueProducer: [SurfaceTexture-0-22659-29] setMaxDequeuedBufferCount: requested buffer count 2 is less than minimum 3

E/Surface: IGraphicBufferProducer::setBufferCount(2) returned Invalid argument E/ACodec: native_window_set_buffer_count failed: Invalid argument (22)

E/ExoPlayerImplInternal: Internal runtime error. java.lang.IllegalArgumentException at android.media.MediaCodec.native_setSurface(Native Method) at android.media.MediaCodec.setOutputSurface(MediaCodec.java:2042) at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.setOutputSurfaceV23(MediaCodecVideoRenderer.java:1014) at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.setSurface(MediaCodecVideoRenderer.java:422) at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.handleMessage(MediaCodecVideoRenderer.java:387) at com.google.android.exoplayer2.ExoPlayerImplInternal.deliverMessage(ExoPlayerImplInternal.java:864) at com.google.android.exoplayer2.ExoPlayerImplInternal.sendMessageToTarget(ExoPlayerImplInternal.java:835) at com.google.android.exoplayer2.ExoPlayerImplInternal.sendMessageInternal(ExoPlayerImplInternal.java:817) at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:330) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loop(Looper.java:237) at android.os.HandlerThread.run(HandlerThread.java:67)

Android 10 向 MediaCodecInfo 引入了新的 API,用于查询编解码器是否是硬件加速的,是否只是软件的,以及它是由设备制造商还是 Android 平台提供的。 ExoPlayer 2.11 通过新的 hardwareAccelerated、softwareOnly 和供应商标志在其自己的 MediaCodecInfo class 中显示此信息。即使在 Android.

的旧版本上 运行 时,这些标志也可以访问并且(在大多数情况下)可以正确设置

进一步参考:ExoPlayer 2.11 -Resolve Media Codec Problems