我们正在使用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()
以横向播放视频,但播放器控件被隐藏,并且仅播放质量最低的视频。请帮助我们。
答案 0 :(得分:0)
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帖子中找到另一种补救方法。
答案 1 :(得分:0)
据我所知,exoplayer
将基于texture view
的大小生成其大小。因此,尝试通过编程方式调整texture view
的大小
playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL);
并尝试以编程方式调整播放器大小
mPlayer.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
希望这会有所帮助。