我使用自定义AVPlayerLayer
来显示简单视频。我正在尝试添加airplay支持,但点按时按钮不会显示任何内容。
self.player.allowsExternalPlayback = true
...
let airplayButton = MPVolumeView(frame: self.airplayButtonPlaceholder!.bounds)
airplayButton.showsRouteButton = true
airplayButton.showsVolumeSlider = false
self.airplayButtonPlaceholder?.addSubview(airplayButton)
self.airplayButtonPlaceholder?.backgroundColor = UIColor.clear
当我运行我的代码(在真实设备上)时,我看到了按钮,但当我点击它时,没有任何反应。可能是什么导致了这个?是因为我使用自定义AVPlayerLayer
和AVPlayer
?
修改
当我打开通过控制中心的镜像时,我可以触摸按钮并显示弹出窗口。发生了什么事?
答案 0 :(得分:1)
没有任何事情发生,因为你没有正确配置这个“新窗口”。
使用Airplay可以通过两种方式显示内容。
<强>镜像强>
不需要任何配置。
注意:您无需执行任何操作即可进行镜像。在iOS中 5.0及更高版本,镜像 - 即在主机设备和外部显示器上显示相同的内容 - 默认情况下发生 用户选择AirPlay视频输出设备。
额外窗口
apple描述的步骤是:
以下是从苹果文档中获取的代码,以供快速参考。
- (void)checkForExistingScreenAndInitializeIfPresent
{
if ([[UIScreen screens] count] > 1)
{
// Get the screen object that represents the external display.
UIScreen *secondScreen = [[UIScreen screens] objectAtIndex:1];
// Get the screen's bounds so that you can create a window of the correct size.
CGRect screenBounds = secondScreen.bounds;
self.secondWindow = [[UIWindow alloc] initWithFrame:screenBounds];
self.secondWindow.screen = secondScreen;
// Set up initial content to display...
// Show the window.
self.secondWindow.hidden = NO;
}
}
- (void)setUpScreenConnectionNotificationHandlers
{
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(handleScreenDidConnectNotification:)
name:UIScreenDidConnectNotification object:nil];
[center addObserver:self selector:@selector(handleScreenDidDisconnectNotification:)
name:UIScreenDidDisconnectNotification object:nil];
}
- (void)handleScreenDidConnectNotification:(NSNotification*)aNotification
{
UIScreen *newScreen = [aNotification object];
CGRect screenBounds = newScreen.bounds;
if (!self.secondWindow)
{
self.secondWindow = [[UIWindow alloc] initWithFrame:screenBounds];
self.secondWindow.screen = newScreen;
// Set the initial UI for the window.
}
}
- (void)handleScreenDidDisconnectNotification:(NSNotification*)aNotification
{
if (self.secondWindow)
{
// Hide and then delete the window.
self.secondWindow.hidden = YES;
self.secondWindow = nil;
}
}
修改强>
使用AVPlayerViewController时,它已按文档here中所述自动实现。
AVPlayerViewController自动支持AirPlay,但您需要 在它可以之前执行一些项目和音频会话配置 在您的应用程序中启用。