Flutter video_player воспроизводится с ошибками или не воспроизводится на определенном устройстве после обновлений SDKAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Flutter video_player воспроизводится с ошибками или не воспроизводится на определенном устройстве после обновлений SDK

Сообщение Anonymous »

Я разрабатываю чат-приложение Flutter, которое отображает видео в ленте (аналогично WhatsApp). Недавно, после обновления моего Flutter SDK и изменения моего Android compileSdk на 36, воспроизведение видео полностью прервалось или воспроизводилось с ошибками на определенном устройстве.
Он прекрасно работает на большинстве моих тестовых устройств (например, устройств iOS, устройств Samsung и т. д.). Однако на одном конкретном устройстве (телефоне Redmi) видео вообще отказывается воспроизводиться или воспроизводится с серьезными глюками. Они часто показывают постоянный индикатор загрузки или просто черный экран, а аппаратный декодер, похоже, дает сбой.
Установка:
  • Flutter SDK: последняя стабильная версия
  • Пакет: video_player: ^2.11.1 (с использованием стандартного VideoPlayerController.networkUrl)
  • Android compileSdk: 36 (пришлось обновить с 35 из-за других требований плагина)
  • Реализация: сохранение экземпляров VideoPlayerController в списке и создание
    виджетов VideoPlayer в ListView/.
Проблема и журналы:
Раньше, до обновлений SDK и compileSdk, эти же самые видео прекрасно воспроизводились на этом же устройстве.
Теперь при инициализации VideoPlayerController видео часто не запускается рендеринг, и журналы заполняются декодером. и ошибки цикла BufferQueueProducer.
Вот соответствующие трассировки Logcat с неисправного устройства:

Код: Выделить всё

W/AudioCapabilities(26151): Unsupported mime audio/x-adpcm-ms

W/AudioCapabilities(26151): Unsupported mime audio/x-adp

/OMXClient(26151): IOmx service obtained

D/SurfaceUtils(26151): connecting to surface 0x785f6d4010, reason connectToSurface

D/Surface (26151): Surface::connect(this=0x785f6d4000,api=3)

I/BufferQueueProducer(26151): \[ImageReader-1x1f22m7-26151-3\](this:0x7801d2b800,id:3,api:3,p:26151,c:26151) connect(P): api=3 producer=(26151:com.my.app) producerControlledByApp=true

I/MediaCodec(26151): \[OMX.MTK.VIDEO.DECODER.AVC\] setting surface generation to 26778628

D/SurfaceUtils(26151): disconnecting from surface 0x785f6d4010, reason connectToSurface(reconnect)

D/Surface (26151): Surface::disconnect(this=0x785f6d4000,api=3)

I/BufferQueueProducer(26151): \[ImageReader-1x1f22m7-26151-3\](this:0x7801d2b800,id:3,api:3,p:26151,c:26151) disconnect(P): api 3

D/SurfaceUtils(26151): connecting to surface 0x785f6d4010, reason connectToSurface(reconnect)

D/Surface (26151): Surface::connect(this=0x785f6d4000,api=3)
Он также иногда выдает: java.lang.IllegalArgumentException: start error.
Что я подозреваю:
Поскольку плагин video_player_android использует androidx.media3 (ExoPlayer) под капотом, я подозреваю, что обновление compileSdk до версии 36 заставило Gradle включиться более новая версия библиотек Media3 ExoPlayer. Эта более новая версия, в сочетании с логикой создания поверхности встраивания Android Flutter, похоже, имеет периодические сбои выделения буфера аппаратного кодировщика на этом конкретном устройстве.
Я пытался понизить версию compileSdk обратно до 35, но меня заблокировали, потому что несколько других плагинов Firestore/core Flutter теперь явно требуют compileSdk 36.
Вопросы:
  • Есть ли способ заставить flutter video_player использовать конкретную, более старую версию androidx.media3, которая может не иметь этого цикла поверхностного перераспределения?
  • Кто-нибудь сталкивался с этим сбоем/проблемой аппаратного декодера ExoPlayer на определенных устройствах Android? Есть ли флаг конфигурации или возможностей на стороне клиента, который я могу передать в VideoPlayerController, чтобы обойти это?
  • Может ли это быть связано с тем, как Flutter 3.27 обрабатывает рендеринг текстур на Android?
Любые рекомендации о том, как исправить это, не вырывая всю инфраструктуру видеоплеера, были бы потрясающими.

Подробнее: https://stackoverflow.com/questions/799 ... ce-after-s
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»