ExoPlayer масштабирует или обрезает видео после изменения качества на Android TV с помощью Media3 (v1.6.1)Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 ExoPlayer масштабирует или обрезает видео после изменения качества на Android TV с помощью Media3 (v1.6.1)

Сообщение Anonymous »

Я работаю над приложением для потокового видео, которое использует ExoPlayer с Media3 версии 1.6.1 и androidx.media3.ui.PlayerView внутри Jetpack Compose. Наш сервис транслирует контент в прямом эфире и по запросу (например, Aparat Sport), и мы разрешаем пользователям вручную изменять качество видео с помощью TrackSelectionOverride.
Проблема возникает только на некоторых телевизорах Android (например, Xiaomi TV) и очень постоянна:
✅ Проблема:
Когда я меняю качество видео (например, с 480p на 1080p), видео:
Обрезается или увеличивается до верхнего левого угла.
Или, если я уменьшаю качество (например, 1080p → 360p), видеокадр сжимается и прилипает к левому верхнему углу экрана.
✅ Что я делаю:
Я использую этот метод для применения переопределения дорожки:

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

player.trackSelector?.parameters = newTrackSelectionParams
Я также реализовал обратные вызовы, такие как onTracksChanged, onVideoSizeChanged и onSurfaceSizeChanged. Вот порядок того, что я наблюдаю во время первоначального воспроизведения:

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

onSurfaceSizeChanged: 1920x1080
onTracksChanged:      1920x1080
onVideoSizeChanged:    640x360   ← actual video resolution
Поэтому ExoPlayer изначально отображает размер поверхности, а не декодированное разрешение, что приводит к проблемам с масштабированием.
✅ Что я пробовал (и не работало):
Переключение с SurfaceView на TextureView через пользовательское представление проигрывателя.
Вызов requestLayout() или инвалидации() в PlayerView.
Перепривязка поверхности вручную с помощью setVideoSurface() или setVideoTextureView().
Повторное применение макета после задержки после изменения качества.
❓ Мой вопрос:
Как правильно обрабатывать изменение размера поверхности или обновления макета в ExoPlayer/Media3 при изменении качества видео, особенно для телевизоров Android?
/>Как я могу гарантировать, что проигрыватель отображает фактический размер декодированного видео и избежать проблем с обрезанием/масштабированием рендеринга после переключения разрешения?
🛠 Технический стек:
ExoPlayer (Media3 1.6.1)
Android TV (различных марок)
Jetpack Compose
Ручное переопределение дорожки (поток HLS)

Подробнее здесь: https://stackoverflow.com/questions/796 ... ing-media3
Ответить

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

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

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

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

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