【问题标题】:Getting actual width of Chromecast receiver UI获取 Chromecast 接收器 UI 的实际宽度
【发布时间】:2023-04-01 08:18:02
【问题描述】:

我有一个连接到显示器的第二代 Chromecast。我正在从 Chromecast 接收 1080p60。

Cast documentation 在多个地方声明 UI 的分辨率为 720p:

虽然 Chromecast 在 720p 图形平面上显示接收器页面,但包括 Android TV 在内的其他 Cast 平台可能会显示高达 1080p 的页面。

还有,media formats 上的这条注释:

图像的显示尺寸限制为 720p (1280x720)。图像应优化至 1280x720 或更小,以避免在接收器设备上缩小。

确实,如果您在接收器应用程序上打开调试控制台,您可以看到window.innerWidth1280,而window.innerHeight720

这让我相信视频被硬件解码到它自己的层,直接到视频输出,并且基于浏览器的 UI 以较低的分辨率呈现并覆盖在它上面。但随后,我在 DOM 本身中看到了 <video> 元素,并想知道它是如何工作的。有一瞬间,我以为它可能是在控制一些后台硬件播放器,但是这个视频可以用 CSS 来操作,所以这没有任何意义。

我在 Web UI 中添加了一个 1920x1080 的测试图像并进行了捕捉。

我不确定这是否会出现在 Stack Overflow 的图像视图中,但测试图像是完美的。我可以看到每一行,这意味着图像实际上以 1920x1080 显示。

因此,文档似乎并不能说明全部情况。 UI 实际上是以输出分辨率呈现的……在我的例子中是 1920x1080。但它使用 1280x720 的虚拟像素大小。我宁愿访问完整的分辨率,所以我添加了适当的视口元标记,就像我为移动设备所做的那样:

<meta name="viewport" content="width=device-width, initial-scale=1" />

不幸的是,这没有效果!视口仍然是 1280x720,即使它在现实中以更高的分辨率渲染。

有没有办法解决这个问题?

【问题讨论】:

  • 我无法找到任何方法来找出屏幕的实际分辨率或更改它,但可能有帮助的一件事是 window.devicePixelRattio 似乎设置为 1.5 on我的电视。乘以720*1.5... 1080。不知道这如何适用于我的超高清电视..

标签: chromecast google-cast google-cast-sdk


【解决方案1】:

必须得到接收器的分辨率,发现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};
})()

这显然可以通过预定义的分辨率或只是一些二进制搜索来变得更漂亮。

随时发布更好的解决方案。 :)

【讨论】:

  • 我认为您的devicePixelRatio 解决方案要好得多!但是,这很有趣...我没有意识到您可以将宽度/高度传递给 canDisplayType()
  • 是的。不幸的是,“devicePixelRatio”并不总是正确的。这就是我“研究”这种方法的原因。
猜你喜欢
  • 1970-01-01
  • 2011-08-18
  • 2013-09-24
  • 1970-01-01
  • 2013-01-24
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多