Amazon Fire Stick下播放列表切换视频分辨率时ExoPlayer无法铺满视图
ExoPlayer在Fire Stick上动态适配视频分辨率的解决方案
针对你使用ExoPlayer v2.16.1开发安卓TV播放器时,在Fire Stick(FireOS 6 & 7)上遇到的播放列表视频尺寸锁定问题,这里提供几个可行的解决方法:
重置Surface尺寸并触发视图重布局
在媒体项切换时,主动取消Surface的固定尺寸限制并请求视图重新布局,强制ExoPlayer适配新视频的分辨率:player.addListener(new Player.Listener() { @Override public void onMediaItemTransition(MediaItem mediaItem, int reason) { // 清除Surface的固定尺寸锁定 if (videoView instanceof SurfaceView) { SurfaceHolder holder = ((SurfaceView) videoView).getHolder(); holder.setFixedSize(0, 0); } // 触发视频视图重新计算布局参数 videoView.requestLayout(); } });改用TextureView作为视频渲染视图
FireOS对SurfaceView的动态尺寸适配存在兼容性问题,替换为TextureView通常能解决这类问题。修改布局文件:<androidx.media3.ui.TextureView android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="match_parent" />代码中强制PlayerView使用TextureView:
PlayerView playerView = findViewById(R.id.player_view); playerView.setUseTextureView(true); playerView.setPlayer(player);配置正确的视频缩放模式
确保播放器视图使用合适的缩放模式,保证16:9比例的视频能全屏适配:// 可选RESIZE_MODE_FILL(填充全屏)或RESIZE_MODE_FIT(保持比例居中) playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL);
这些方法均针对FireOS的特殊兼容性问题设计,其他安卓TV设备正常是因为系统对视图渲染的处理逻辑更完善。建议优先尝试重置Surface尺寸的方案,改动最小;若无效再考虑替换TextureView。
内容的提问来源于stack exchange,提问作者Amr Barakat
相关产品推荐
相关产品推荐

