Android TV中的ExoPlayer以纵向模式而非横向播放视频

时间:2018-08-21 11:30:56

标签: kotlin android-tv m3u8 exoplayer

我们正在使用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()

以横向播放视频,但播放器控件被隐藏,并且仅播放质量最低的视频。请帮助我们。

2 个答案:

答案 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);

希望这会有所帮助。