【问题标题】:Ways to rotate HDMI screen in Android在Android中旋转HDMI屏幕的方法
【发布时间】:2021-03-01 13:10:18
【问题描述】:

我正在为运行 Android 7.1.2 的 TVBox 制作媒体播放器应用。我想旋转 HDMI 输出,但盒子的旋转被锁定为横向,所以我无法使用 setRequestedOrientation 旋转应用程序。 我使用的库是带有 SurfaceView 的 VLC Android。我不能使用 TextureView,因为它太滞后了 FPS。

要旋转 HDMI 输出,我尝试了以下方法:

  • 修改 build.prop 文件但没有成功。
  • 安装了一堆屏幕旋转应用,但也没有用。
  • 我已经尝试过这个和一些相关的教程,但是没有用:

https://android.stackexchange.com/questions/117003/allow-rotate-into-portrait-mode-but-do-not-rotate-external-display

  • 我尝试使用 MediaRouter,但盒子将 HDMI 识别为主屏幕而不是外部屏幕。
  • 我尝试使用 VLC 过滤器:video-filter=rotate, :video-filter=transform,但它只能在 4.0 中使用。
  • 我还修改了 VLC 源代码,但遗憾的是它只能旋转图片,不能旋转视频。

那么有没有其他方法可以尝试旋转 HDMI 输出的屏幕方向? 有没有可能我们可以通过 OpenGL ES 或原生代码来旋转屏幕?

谢谢。

【问题讨论】:

  • 我不知道它是否有帮助,但如果它就像一个普通的应用程序,你能把输出加载到一个视图中然后旋转视图吗? (使用 android:rotation)?
  • @DanBaruch 是的,我已经尝试过了,但 SurfaceView 无法转换。它的视图部分和表面部分是分开的:(。
  • 哦,对不起,我想不出更多了:(

标签: android opengl-es orientation hdmi vlc-android


【解决方案1】:

所以你说你不能使用video-filter=rotate,那么video-filter=transform呢?

final ArrayList<String> args = new ArrayList<>();
args.add("--video-filter=transform");
args.add("--transform-type=270");

mLibVLC = new LibVLC(context, args);
mMediaPlayer = new MediaPlayer(mLibVLC);
final IVLCVout vlcVout = mMediaPlayer.getVLCVout();
vlcVout.setVideoView(mSurfaceView);
vlcVout.setWindowSize(mSurfaceView.getWidth(), mSurfaceView.getHeight());

【讨论】:

  • 我也试过这个过滤器,但它也不起作用。我在 VLC git 上问过这个问题,他们说视频过滤器将在 4.0 中可用。
  • 好吧,如果您使用的是THIS lib,我可以确保您在我的问题中发布的代码与implementation group: 'org.videolan.libvlc', name: 'libvlc', version: '2.5.5' 一起运行良好且非常高效(目前只是从一些回购中挖掘了这个sn-p未维护)
  • 我会尝试这种方式。谢谢你:))
  • 我尝试了上面的方法,但它只输出视频的第一帧然后黑屏,音频仍在播放。我还看到 libvlc 无法加载过滤器或旋转模块:core video output: Failed to create video filter 'transform'core video output: Failed to add filter 'transform'。猜猜我必须在网络服务器上旋转视频。
  • 好吧,如果有人在使用图像,那么这种方式或带有变换或旋转的 VLCLib 的最新版本是有效的,但不适用于视频。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
相关资源
最近更新 更多