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

Omk*_*hav 6 kotlin m3u8 android-tv exoplayer

我们正在使用ExoPlayer在Android TV上播放m3u8文件(流).流媒体工作正常,但视频以纵向模式播放(即使视频是以横向拍摄的).看起来像Android电视的方向而不是纵横比的一些问题.

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

评论这些行:

mPlayerAdapter = LeanbackPlayerAdapter(activity, mPlayer, UPDATE_DELAY)
mPlayerGlue = VideoPlayerGlue(activity!!, mPlayerAdapter!!)
mPlayerGlue!!.host = VideoSupportFragmentGlueHost(this)
mPlayerGlue!!.playWhenPrepared()
Run Code Online (Sandbox Code Playgroud)

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

ARG*_*Geo 1

视频的元数据MP4包含一个名为 的属性Rotation=90\xc2\xb0,但它被ExoPlayer. 要修复它,您需要将此 Java 函数注入到您的代码中:

\n\n
void onVideoSizeChanged(int width, \n                        int height, \n                        int unappliedRotationDegrees, // 90\xc2\xb0 or 270\xc2\xb0\n                      float pixelWidthHeightRatio);\n
Run Code Online (Sandbox Code Playgroud)\n\n

这允许应用程序通过TextureView对 进行适当的调用来轻松应用旋转TextureView.setTransform。请注意,在 Lollypop+ 上,unappliedRotationDegrees它始终等于 0。

\n\n

您可以在 GitHub 的MediaCodecVideoTrackRenderer页面的第 74 行找到此函数。

\n\n
\n

如果上述方法对您不起作用,您可以在GitHub 上的Rotation Issue #91帖子中找到另一种补救方法。

\n
\n