- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试检测设备何时能够以 4K UHD (3840x2160) 分辨率输出。许多设备(例如 nVidia Shield TV 和 Sony Xperia Z5 Premium)将报告它们以 1080p 运行,即使它们具有超高清功能,因为它们默认为非视频布局的 1080p 输出。我需要一些方法来检测它们是否支持 4K 以区分它们和 Nexus Player 等非 4K 设备。
这是我用来确定当前分辨率的代码:
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
在 Shield TV 上,这始终返回 1920x1080,即使 ExoPlayer 报告它正在以 3840x2160 输出视频。
最佳答案
更新:自 ExoPlayer 1.5.1 起已修复此问题(请参阅 https://github.com/google/ExoPlayer/commit/79055066813123c939c29e5a5e223a5ff043b91e)
我跟进了 ExoPlayer 的开发者并找到了答案:
可靠检测 4K 设备的唯一方法是使用 Device.Mode
,它仅在 api 级别 23+ 中可用。请在此处查看 Android M 注释:
https://developer.android.com/preview/api-overview.html#4K-display
类的文档在这里:
https://developer.android.com/reference/android/view/Display.Mode.html#getPhysicalWidth()
至于 ExoPlayer
,从当前版本 (1.4.2) 开始,它没有实现此代码,但这可能会改变。见:
https://github.com/google/ExoPlayer/issues/800
最后回答这个问题,现在检测 4K 的正确方法是这样的:
/**
* Used to check if the connected device support UHD (3840x2160)
*
* Note that this call will fail to identify UHD devices on api level bellow 23 (M)
*
* @return 1 if device is UHD, 0 otherwise
*/
public int isUHD(){
Display display = getActivity().getWindowManager().getDefaultDisplay();
Point displaySize = getDisplaySize(display);
return (displaySize.x >= 3840 && displaySize.y >= 2160) ? 1 : 0;
}
/**
* Convenience function that forks to the different ways to obatin the Display size across Android versions
*
* @param display Display instance to obtain information from
*
* @return Point a Point describing the Display size
*/
private static Point getDisplaySize(Display display) {
Point displaySize = new Point();
if(Util.SDK_INT >= 23){
getDisplaySizeV23(display, displaySize);
}else if(Util.SDK_INT >= 17) {
getDisplaySizeV17(display, displaySize);
} else if(Util.SDK_INT >= 16) {
getDisplaySizeV16(display, displaySize);
} else {
getDisplaySizeV9(display, displaySize);
}
return displaySize;
}
@TargetApi(23)
private static void getDisplaySizeV23(Display display, Point outSize){
Display.Mode[] modes = display.getSupportedModes();
if(modes.length > 0){
Display.Mode mode = modes[0];
outSize.x = mode.getPhysicalWidth();
outSize.y = mode.getPhysicalHeight();
}
}
@TargetApi(17)
private static void getDisplaySizeV17(Display display, Point outSize) {
display.getRealSize(outSize);
}
@TargetApi(16)
private static void getDisplaySizeV16(Display display, Point outSize) {
display.getSize(outSize);
}
private static void getDisplaySizeV9(Display display, Point outSize) {
outSize.x = display.getWidth();
outSize.y = display.getHeight();
}
这将在小于 23 的 api 上给出错误的结果。
关于android - 在 Android 上检测 4K UHD 屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32557228/
我一直在尝试编译以下网站中给出的代码来创建一个 USRP 对象 https://kb.ettus.com/Getting_Started_with_UHD_and_C%2B%2B 对于懒惰的病人,只需
根据好的答案更新: 资源: Prores HQ 4:2:2 10bit 4kp25 记录:2020 这是我现在的语法: ffmpeg -pix_fmt yuv422p10 -i JUNGLES_PLU
我正在与 Redhawk 合作,试图通过 redhawk 构建一个设备来运行 USRP x310 作为接收器。我正在尝试使用来自 https://github.com/RedhawkSDR/USRP_
我在 Windows 10 上使用 SDL2 创建 OpenGL 上下文,但是当我尝试在 Intel UHD 630 上获取帧缓冲区附件颜色编码时,我收到了无效操作错误。在我的 Nvidia Gefo
我在 gnuradio companion (grc) 中创建了一个 bpsk 流程图,它工作正常。目前,我正在使用 gnuradio 类编写与同一程序等效的 C++。首先,我从一个文件中读取 I/Q
我正在尝试检测设备何时能够以 4K UHD (3840x2160) 分辨率输出。许多设备(例如 nVidia Shield TV 和 Sony Xperia Z5 Premium)将报告它们以 108
4K 设备越来越受欢迎。我正在开发一个网站,我有一部带有超高清显示屏的手机。我注意到图像很模糊。我立即想到会不会是 4K 的事实。通过如下例所示将图像大小加倍,我发现它不再模糊了。 4K/超高清:
我似乎无法在 Visual Studio 2013 中编译一个非常简单的程序。我的目标是将 UHD 合并到 C++ 程序中 (UHD Driver and Libraries for Windows)
我正在我的服务器上测试 FFMPEG。我正在尝试将 H265 10 位转码为 H264 8 位,以支持在所有主要网络浏览器上播放视频。 1 .这是第一个命令: ffmpeg -i 4K.ts -c:a
以防我购买带有集成英特尔® UHD 显卡 620 的 Thinkpad 并在其下安装 Ubuntu Linux 和 TensorFlow。然后,稍后我添加带有 Nvidia GPU 的 eGPU。我应
我目前有一个程序一直在使用我的 Nvidia GPU 运行。 我想在旁边运行另一个,它将使用 OpenCV 和 OpenCL。 我使用 Ubuntu 18.04,我的处理器是 Intel i7-975
我是一名优秀的程序员,十分优秀!