kotlin - Android TV 中的 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()
横向播放视频,但播放器控件被隐藏,它只播放最低质量的视频。请帮助我们。
解决方案
视频的元数据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帖子中找到另一种补救措施。
推荐阅读
- javascript - Where does passed arguments saved in a rendered react component
- javascript - 为什么 JavaScript 的 map() 可以工作,但我的 for 循环在 React 中失败?
- javascript - fullcalendar - 多次单击后的奇怪行为
- amazon-web-services - 如何决定 Jenkins 使用哪个 EC2 实例运行 20 个并发构建?
- mobile - NoteText Acumatica 移动框架
- bash - 如何检查相同参数的各种值
- shell - 从 perl 脚本运行 Unix 命令
- c++ - 极坐标表示中的最小二乘拟合线
- node.js - Mocha 节点测试,返回结果作为 Null 而不是查询值传递?
- javascript - 为什么我的回调函数总是返回错误而不是响应