- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我尝试在 RecyclerView 和 ViewPager 中使用 exoplayer 显示演示视频 (.mp4)。我展示了带有自定义布局的视频 Controller 。到目前为止一切顺利。
现在尝试像其他视频播放器一样全屏显示视频,但在 exoplayer 文档中找不到好的方法。
谁能帮帮我?
最佳答案
ExoPlayer 库目前不提供启用/禁用全屏模式的内置方法。恐怕您需要自己实现或为此寻找一些第三方代码。
基本上需要两个步骤:
a) 将窗口和 Activity 属性设置为全屏和/或沉浸式模式,并(如果需要)更改为横向模式。那并不难。参见 this page on Android Developers .
b) 将渲染过渡到 SimpleExoPlayerView
(实际上是关于 Surface),它以沉浸式模式覆盖整个视口(viewport)。这对于在所有 API 级别上实现最佳用户体验而言更具挑战性。
为了获得最佳的用户体验,我们希望播放器在切换到全屏和返回时继续播放,以无缝地继续播放。在 RecyclerView 中,解决所有 API 级别的问题有点棘手。
方法一
最简单的方法可能是拥有一个单独的 SimpleExoPlayerView 实例,一旦进入沉浸式模式,就将其放在布局的顶部(有些人为此打开一个带有第二个 View 的对话框,有些人只是将第二个 View 放在顶部以某种方式在布局中并按需显示/隐藏它)。
然后您从 RV 中嵌入的 SimpleExoPlayerView 分离播放器实例,并通过调用 static helper method 将其附加到全屏 View :
SimpleExoPlayerView.switchTargetView(simpleExoPlayer, oldPlayerView, newPlayerView);
这种方法在 API >=23 上非常有效。使用 API 23 方法 MediaCodec.setOutputSurface允许动态交换表面已被添加。上面的静态方法确保应用此技术。结果,音频和视频继续播放,进入和退出全屏的用户体验非常流畅。对于 API <=22,需要创建一个新的编解码器实例以交换到另一个表面。这会中断播放,并且这种方法的用户体验会下降。
方法二
为避免切换到较低 API 级别的另一个表面,您需要使用单个表面并以某种方式将其转换为全屏。您可以只隐藏除 SimpleExoPlayerView 之外的所有其他内容,并设置布局宽度和高度以匹配其父 View ,或者您可以用占位符替换视频 View 并将其放在顶部和背面。
这对于简单的布局可以很好地工作,但对于可能包括 fragment 、viewpager、recyclerviews 的复杂布局,这可能是一个非常侵入性的操作,导致某些东西闪烁或短暂中断播放(在某些 API 级别上,例如从中删除播放器 View 时) View 层次结构)。不过,我已经看到这对各种布局都很有效。
进一步的方法/挑战
当您深入挖掘和/或如果您根本不使用 SimpleExoPlayerView 时,可能还有其他更好的方法。
关于android - 全屏 Exoplayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48420974/
我正在尝试使用 Qt 制作游戏,因为它太棒了 ;) 而且您可以免费获得所需的所有东西。唯一的问题是更改系统分辨率和设置 QWidget(或 QGLWidget)“真正的”全屏。 你们中有人成功地做到了
有没有办法以全屏模式(没有工具栏、导航)启动 gwt-app? 我只找到了打开新窗口的提示: Window.open("SOMEURL","SOMETITLE", "fullscreen=yes
if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscr
我想解释一下我现在在做什么。我开发了一个 aar(sdk) 并且运行良好。但是,我希望我的 sdk 在被调用时占据全屏,即使调用者有一个工具栏。我尝试了此链接中的示例 [ How to set act
我是 Blazor 的新手,我正在尝试了解如何以全屏模式打开浏览器。我知道我可以执行 Javascript 中断并运行 Javascript,但这违背了 Blazor 的目的。 如何在 Blazor
我正在创建一个全屏应用程序,并且想知道是否有某种方法可以使 NSAlert 位于我创建的 CGDisplayCapture 之上。现在,NSAlert 显示在显示捕获后面。我的主窗口显示得很好(在使用
有人可以解释一下下面的代码是如何工作的吗? 元素指的是视频,全屏指的是页面上的链接。 我无法理解 if 语句 var element = document.getElementById('elemen
我想要实现的是类似于 Instagram 应用内网络浏览器,在您点击广告时使用: 我所做的是,我使用了 WebView bottomSheetDialogFragment,并覆盖了 onCreateD
第二个 ViewController 的顶部有这个空间,它几乎在手机上显示为可关闭的弹出窗口。如何使全屏显示(删除橙色箭头指向的空间)? 最佳答案 这是 iOS 13 的一项更改。用户将开始期望能够滑
我正在尝试在全屏模式下使用 emacs 并使用合适的字体。我有一台运行 Ubuntu 的基于 nvidia 的笔记本电脑。首次加载时,字体很大,认为是 16pt 字体。我使用菜单选项设置了合适的字体(
我有一个 GridView,我使用 BaseAdapter 来调整我的 GridView 中的图像和文本。我有一个问题,当我运行我的应用程序时,我的“GridView”有左、右、上和下边距。我不需要这
是否可以在全屏模式下使用 Android Studio 例如只有我们编码的那个字段应该显示在整个屏幕上。 像这样: 最佳答案 您可以使用“无干扰模式”: 关于全屏 Android Studio,我们在
我正在制作一个应用程序,当手机处于纵向时,我需要 fragment 显示菜单栏(带有设置快捷方式等),但当它处于横向时,我需要全屏。 因此,我有一个管理 2 个 fragment 的 Activity
我想知道是否可以在没有标签栏和导航栏的情况下全屏推送 NavigationController 的 ViewController。我的问题如下: 我的应用在 TabBarController 中嵌入了
我制作了一个1920 * 1048的flash(16:9的屏幕),并将其嵌入到html中喜欢: 问题是: 在 4:3 屏幕中,flash 的宽度为 100%,但顶部和底部有白色填充。看来闪光灯
我想制作一个同时包含多个文本的HTML5视频。 文本应该以不同的css布局(文本颜色、字体、阴影)显示在视频的不同位置(同时) 我试过这个教程http://www.artandlogic.com/bl
需要一些帮助。 我需要水平滑动一次长图像,然后再水平滑动回来...我在这里学习了一个教程 https://css-tricks.com/creating-a-css-sliding-backgroun
我正在制作一个简单的登录页面,并试图将以下图像作为背景全屏:image 我的 CSS 目前看起来像这样: body { background-image: url('/images/bg.jp
我想用透明色覆盖我的背景图片,但颜色没有覆盖背景图片。 这是我的演示: http://jsfiddle.net/farna/73kx2/ CSS 代码: .overlay{ backgroun
有什么方法可以隐藏状态栏并保持操作栏可见吗? 最佳答案 是的,有。您应该在 Activity 的 onCreate 方法中设置 FLAG_FULLSCREEN。 @Override public vo
我是一名优秀的程序员,十分优秀!