gpt4 book ai didi

android - 在屏幕墙上播放和分割视频

转载 作者:行者123 更新时间:2023-12-05 00:00:48 27 4
gpt4 key购买 nike

我正在开发一个 Android TV 应用程序项目。我需要将一个视频平均分成 2、3 或 X 个屏幕。每个屏幕上都插着一个安卓电视棒,上面有我的应用程序。例如:如果我们有 2 个屏幕,每个屏幕将显示 50% 的已播放视频。如果我们有 3 个屏幕,每个屏幕将显示播放视频的 33.33%。如果我们有 4 个屏幕,每个屏幕将显示已播放视频的 25%。

这里有一张图片可以更好地理解我的期望:

screen walls

视频在墙上的每个屏幕上同时播放,关于这一点我已经考虑过了:一个屏幕将是 NTP(网络时间协议(protocol))主机,其他屏幕将是从机).同步播放器。

我的第一个想法是在每个应用程序上都有完整的视频,播放它并只显示我需要的部分。我怎样才能做到这一点?可能吗?

预先感谢您的帮助。

最佳答案

我不清楚您将如何处理高度(例如,如果您有一个 1080p 视频但跨越四个屏幕,您将不得不切断 3/4 的像素以“放大” “在屏幕上),但有一些想法:

如果您不必担心 HDCP,HDMI 分离器可能会起作用。如果不是,但它是一次性 Activity (例如,为贸易展设置信息亭),那么创建单独的视频文件可能是风险最小且最容易的,它们实际上按照您想要的方式拆分。如果这必须更加灵活/稳健,那么这将是一段有一些选择的旅程。

最简单

您应该能够根据需要设置一个 SurfaceView,并为每个设备调整偏移量。例如,屏幕 2 可能有一个 SurfaceView,其宽度设置为 #_of_screens * 1920(或任何合适的分辨率),X 起始位置为 -1920。需要注意的是,我不知道它可以支持多大的 SurfaceView。例如,这可能只适用于两个屏幕,但不适用于十个屏幕。

您可以尝试使用 VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING根据您需要显示的大小来缩放视频输出。

对于功能强大的设备

如果您使用的设备足够强大,您可以在屏幕外渲染到 SurfaceTexture,然后将纹理的一部分复制到 GLSurfaceView。如果这是 DRMed 内容,您还必须检查 EGL_EXT_protected_content 扩展。

适用于 Android 10+

如果设备运行的是 Android 10 或更高版本,SurfaceControl 可能适合您。您可以使用 SurfaceControl.Transaction 来操作 SurfaceControl,包括映射缓冲区坐标的方式。基本代码最终看起来像这样:

new SurfaceControl.Transaction()
.setGeometry(surfaceControl, sourceRect, destRect, Surface.ROTATION_0)
.apply();

ExoPlayer v2 演示中还有一个 SurfaceControl 示例:https://github.com/google/ExoPlayer/tree/release-v2/demos/surface

关于android - 在屏幕墙上播放和分割视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70321444/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com