Android TV 中的 ExoPlayer 以纵向模式而不是横向模式播放视频
Posted
技术标签:
【中文标题】Android TV 中的 ExoPlayer 以纵向模式而不是横向模式播放视频【英文标题】:ExoPlayer in Android TV plays video in portrait mode instead of landscape 【发布时间】:2019-01-27 14:06:39 【问题描述】:我们正在使用 ExoPlayer 在 android TV 上播放 m3u8 文件(流)。流媒体工作正常,但视频以纵向模式播放(即使视频是横向拍摄的)。 看起来 Android TV 的方向而不是纵横比存在一些问题。
private fun initializePlayer()
if(mPlayer == null)
playerView = activity!!.findViewById<SimpleExoPlayerView>(R.id.texture_view)
// playerView!!.setControllerVisibilityListener(this)
playerView!!.requestFocus()
val bandwidthMeter = DefaultBandwidthMeter()
val videoTrackSelectionFactory = AdaptiveTrackSelection.Factory(bandwidthMeter)
mTrackSelector = DefaultTrackSelector(videoTrackSelectionFactory)
mPlayer = ExoPlayerFactory.newSimpleInstance(activity, mTrackSelector)
playerView!!.player= mPlayer
mPlayerAdapter = LeanbackPlayerAdapter(activity, mPlayer, UPDATE_DELAY)
mPlayerGlue = VideoPlayerGlue(activity!!, mPlayerAdapter!!)
mPlayerGlue!!.host = VideoSupportFragmentGlueHost(this)
mPlayerGlue!!.playWhenPrepared()
play(s1)
评论这些行:
mPlayerAdapter = LeanbackPlayerAdapter(activity, mPlayer, UPDATE_DELAY)
mPlayerGlue = VideoPlayerGlue(activity!!, mPlayerAdapter!!)
mPlayerGlue!!.host = VideoSupportFragmentGlueHost(this)
mPlayerGlue!!.playWhenPrepared()
横向播放视频,但播放器控件被隐藏,它只播放最低质量的视频。请帮助我们。
【问题讨论】:
【参考方案1】:MP4
视频的元数据包含一个名为Rotation=90°
的属性,但它被ExoPlayer
忽略。要修复它,您需要将此 Java 函数注入到您的代码中:
void onVideoSizeChanged(int width,
int height,
int unappliedRotationDegrees, // 90° or 270°
float pixelWidthHeightRatio);
这允许使用TextureView
的应用程序通过适当调用TextureView.setTransform
轻松应用旋转。请注意,在 Lollypop+ 上,unappliedRotationDegrees
将始终等于 0。
你可以在 GitHub 的 MediaCodecVideoTrackRenderer 页面的第 74 行找到这个函数。
如果上述方法对您不起作用,您可以在 GitHub 上的 Rotation Issue #91 帖子中找到另一种补救措施。
【讨论】:
【参考方案2】:据我所知,exoplayer
将根据texture view
大小生成其大小。所以尝试以编程方式调整您的texture view
的大小
playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL);
并尝试以编程方式调整播放器的大小
mPlayer.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
希望这会有所帮助。
【讨论】:
以上是关于Android TV 中的 ExoPlayer 以纵向模式而不是横向模式播放视频的主要内容,如果未能解决你的问题,请参考以下文章
android tv 中的 Exoplayer 不会在直播中重现 (.m3u8) 文件
Android TV Leanback Exoplayer 视频缩放问题