获取 Chromecast 接收器的实际宽度 UI
Getting actual width of Chromecast receiver UI
我将第二代 Chromecast 连接到显示器。我从 Chromecast 接收 1080p60。
Cast documentation 在几个地方指出 UI 的分辨率为 720p:
While Chromecast displays the receiver page on a 720p graphics plane, other Cast platforms including Android TV may display the page up to 1080p.
还有,关于 media formats 的注释:
Images have a display size limitation of 720p (1280x720). Images should be optimized to 1280x720 or less to avoid scaling down on the receiver device.
确实,如果你在接收器应用程序上打开调试控制台,你可以看到 window.innerWidth
是 1280
,window.innerHeight
是 720
。
这让我相信视频是硬件解码到它自己的层,直接到视频输出,并且 browser-based UI 以较低的分辨率呈现并覆盖在它上面.但是后来,我在 DOM 本身中看到了 <video>
元素,想知道它是如何工作的。有那么一瞬间,我以为它可能在控制一些后台硬件播放器,但是这个视频可以用CSS来操作,所以没有任何意义。
我在网络上添加了一张 1920x1080 的测试图像 UI 并进行了捕捉。
我不确定这是否会出现在 Stack Overflow 的图像视图中,但测试图像非常完美。我可以看到每一行,这意味着图像实际上是以 1920x1080 分辨率显示的。
因此,文档似乎并没有说明全部情况。 UI 实际上是以输出分辨率呈现的……在我的例子中是 1920x1080。但它使用 1280x720 的虚拟像素大小。我宁愿访问完整分辨率,所以我添加了适当的视口元标记,就像我在移动设备上所做的那样:
<meta name="viewport" content="width=device-width, initial-scale=1" />
很遗憾,这没有效果!视口仍然是 1280x720,即使它在现实中以更高分辨率渲染。
有什么解决办法吗?
必须获得接收器分辨率,发现 cast.framework.CastReceiverContext.getInstance().canDisplayType
实际上考虑了当前输出分辨率。
这是我获取视频输出的当前显示分辨率的快速丑陋技巧。
(() => {
var x = 0, y = 1, i = cast.framework.CastReceiverContext.getInstance();
while(i.canDisplayType("video/mp4", "", ++x, y));
x--;
while(i.canDisplayType("video/mp4", "", x,++y));
y--;
return {width: x, height: y};
})()
这显然可以通过预定义的分辨率或一些二进制搜索变得更漂亮。
欢迎 post 更好的解决方案。 :)
我将第二代 Chromecast 连接到显示器。我从 Chromecast 接收 1080p60。
Cast documentation 在几个地方指出 UI 的分辨率为 720p:
While Chromecast displays the receiver page on a 720p graphics plane, other Cast platforms including Android TV may display the page up to 1080p.
还有,关于 media formats 的注释:
Images have a display size limitation of 720p (1280x720). Images should be optimized to 1280x720 or less to avoid scaling down on the receiver device.
确实,如果你在接收器应用程序上打开调试控制台,你可以看到 window.innerWidth
是 1280
,window.innerHeight
是 720
。
这让我相信视频是硬件解码到它自己的层,直接到视频输出,并且 browser-based UI 以较低的分辨率呈现并覆盖在它上面.但是后来,我在 DOM 本身中看到了 <video>
元素,想知道它是如何工作的。有那么一瞬间,我以为它可能在控制一些后台硬件播放器,但是这个视频可以用CSS来操作,所以没有任何意义。
我在网络上添加了一张 1920x1080 的测试图像 UI 并进行了捕捉。
我不确定这是否会出现在 Stack Overflow 的图像视图中,但测试图像非常完美。我可以看到每一行,这意味着图像实际上是以 1920x1080 分辨率显示的。
因此,文档似乎并没有说明全部情况。 UI 实际上是以输出分辨率呈现的……在我的例子中是 1920x1080。但它使用 1280x720 的虚拟像素大小。我宁愿访问完整分辨率,所以我添加了适当的视口元标记,就像我在移动设备上所做的那样:
<meta name="viewport" content="width=device-width, initial-scale=1" />
很遗憾,这没有效果!视口仍然是 1280x720,即使它在现实中以更高分辨率渲染。
有什么解决办法吗?
必须获得接收器分辨率,发现 cast.framework.CastReceiverContext.getInstance().canDisplayType
实际上考虑了当前输出分辨率。
这是我获取视频输出的当前显示分辨率的快速丑陋技巧。
(() => {
var x = 0, y = 1, i = cast.framework.CastReceiverContext.getInstance();
while(i.canDisplayType("video/mp4", "", ++x, y));
x--;
while(i.canDisplayType("video/mp4", "", x,++y));
y--;
return {width: x, height: y};
})()
这显然可以通过预定义的分辨率或一些二进制搜索变得更漂亮。
欢迎 post 更好的解决方案。 :)