2013-02-26 30 views
4

我在使用AirPlay时遇到了一些问题。事情是,我正在开发ATV3,而我的电视机支持1080p。但是当我开始屏幕镜像并接收UIScreen的新实例时,界限和应用程序框架都给我一个720p分辨率。使用AirPlay镜像时发生未知扫描问题

但是,当我实际上将子视图移动到负值并且覆盖整个屏幕时,它变得很奇怪。因此,从技术上讲,我的iPhone以1080p流媒体播放,但UIScreen返回的边界未被扫描。

我已经尝试修改overscanCompensation获取边界或应用程序框架(尝试所有3 overscanCompensation值可用),但我仍然得到相同的结果。

这里是什么我得到的图片(对不起,它在地球上最坏的图片,我知道,但我是用我的手机给图像流亚视:))

Red view is the 720p reported by the bounds property. 红色视图是由bounds报告的720p。

当我真的在ATV2上试用这款产品时(即使它支持1080p,它被限制为720p),结果是完全一样

无论如何,如果有人知道得到真正显示屏避免把一个设置在我的应用程序查看的方法,我会很感激它。

感谢提前:)

+0

你肯定地确定你在ATV2上实际上是1080p,而不是一些内插结果? – Till 2013-02-26 03:28:38

+0

不是真的,但如果你给我一段时间,我会尝试检查。无论如何,ATV2支持1080p分辨率(您可以在首选项中查看),但无法以超过720p的分辨率完美解码视频。 – 2013-02-26 03:30:56

+1

AFAIK AirPlay镜像在ATV上限制为720 - 但这可能是过时的信息 - 只是一个提示。因为这里实际上有一个相关的问题。 http://stackoverflow.com/questions/9952739/airplay-on-new-apple-tv-3rd-gen-for-second-screen-not-at-1080p – Till 2013-02-26 03:37:07

回答

1

最适合大多数电视的设置是:

externalScreen.overscanCompensation = UIScreenOverscanCompensationInsetBounds | UIScreenOverscanCompensationInsetApplicationFrame; // this is the same as setting it to 3 

只是将其设定为UIScreenOverscanCompensationInsetApplicationFrame可能导致的一个UIWindow内容错位。

3是UIScreenOverscanCompensationInsetBounds(1)和UIScreenOverscanCompensationInsetApplicationFrame的一个位掩码(2)对于那些想知道该号码是来自和为什么它的工作原理。

+0

Swift版本:'externalScreen.overscanCompensation = UIScreenOverscanCompensation(rawValue:3)!1 – 2015-07-12 14:36:16

2

当你提到你尝试了所有3种overscanCompensation模式,我想你指的是3种记录模式:

typedef enum { 
UIScreenOverscanCompensationScale, 
UIScreenOverscanCompensationInsetBounds, 
UIScreenOverscanCompensationInsetApplicationFrame, 
} UIScreenOverscanCompensation; 

然而,还有第四个模式,这不在那里,但应该解决您的问题:只需将您的overscanCompensation设置为3

另外,看看这个SO question

2

伊万的答案为我解决了同样的问题!但使用AirPlay镜像时我也有边框。我没有通过更改Apple TV上的设置来设置overscanCompensation属性来摆脱边框:尝试设置'设置>音频&视频>调整AirPlay Overscan'为关(默认开启)。