AirPlay 镜像的欠扫描问题
Posted
技术标签:
【中文标题】AirPlay 镜像的欠扫描问题【英文标题】:Underscan issue with AirPlay mirroring 【发布时间】:2013-02-26 03:22:52 【问题描述】:我在使用 AirPlay 时遇到了一些问题。问题是,我正在使用 ATV3 进行开发,而我的电视机支持 1080p。但是当我开始屏幕镜像并接收到 UIScreen 的新实例时,边界和 applicationFrame 都给了我 720p 的分辨率。
但是当我实际将子视图移动到负值时,它变得很奇怪,并且整个屏幕都被覆盖了。因此,从技术上讲,我的 iPhone 以 1080p 流式传输,但 UIScreen 返回的边界扫描不足。
我尝试在获取边界或 applicationFrame 之前修改 overscanCompensation
(尝试了所有 3 个可用的 overscanCompensation
值),但我仍然得到相同的结果。
这是我得到的照片(抱歉,我知道这是地球上最糟糕的照片,但我用手机将图像流式传输到 ATV :))
红色视图是bounds
报告的720p。
当我在我的 ATV2 中实际尝试这个时,它变得更加奇怪(即使它支持 1080p,它也应该限制在 720p),结果完全一样。
无论如何,如果有人知道获得真实屏幕显示以避免在我的应用中放置设置视图的方法,我将不胜感激。
提前致谢:)
【问题讨论】:
您确定您实际上在 ATV2 上看到的是 1080p 而不是一些插值结果? 不是真的,但如果你给我一点时间,我会试着检查一下。无论如何,ATV2 支持 1080p 分辨率(您可以在首选项中查看),但它无法完美解码分辨率高于 720p 的视频。 AFAIK AirPlay 镜像在 ATV 上仅限于 720 - 但这可能是过时的信息 - 只是一个提示。哦,这里实际上已经有一个相关的问题了; ***.com/questions/9952739/… 我的电视太糟糕了,即使使用 HDMI 适配器,我也无法实现 1:1 的像素关系。抱歉,我想我无法确定:-/ 【参考方案1】:当您提到您尝试了所有 3 种 overscanCompensation
模式时,我认为您的意思是 3 种 记录 模式:
typedef enum
UIScreenOverscanCompensationScale,
UIScreenOverscanCompensationInsetBounds,
UIScreenOverscanCompensationInsetApplicationFrame,
UIScreenOverscanCompensation;
但是,还有第四种模式,它不存在,但应该可以解决您的问题:只需将您的 overscanCompensation
设置为 3
。
另外,看看这个SO question。
【讨论】:
【参考方案2】:Ivan 的回答为我解决了同样的问题!但是我在使用 AirPlay Mirroring 时也有边界。通过更改 Apple TV 上的设置,我摆脱了边框,但没有设置 overscanCompensation 属性:尝试将“设置 > 音频和视频 > 调整 AirPlay 过扫描”设置为关闭(默认打开)。
【讨论】:
【参考方案3】:最适合大多数电视的设置是:
externalScreen.overscanCompensation = UIScreenOverscanCompensationInsetBounds | UIScreenOverscanCompensationInsetApplicationFrame; // this is the same as setting it to 3
仅将其设置为 UIScreenOverscanCompensationInsetApplicationFrame 可能会导致 UIWindow 内容不对齐。
3 是 UIScreenOverscanCompensationInsetBounds(1) 和 UIScreenOverscanCompensationInsetApplicationFrame(2) 的位掩码,适用于那些想知道该数字从何而来以及为什么起作用的人。
【讨论】:
Swift 版本:`externalScreen.overscanCompensation = UIScreenOverscanCompensation(rawValue: 3)!1以上是关于AirPlay 镜像的欠扫描问题的主要内容,如果未能解决你的问题,请参考以下文章