如何禁用暂停/播放通过 Airplay 连接到 Apple TV 的 AVPlayer 的功能

Posted

技术标签:

【中文标题】如何禁用暂停/播放通过 Airplay 连接到 Apple TV 的 AVPlayer 的功能【英文标题】:How to disable the ability to pause/play an AVPlayer connected to an Apple TV via Airplay 【发布时间】:2015-01-18 02:29:14 【问题描述】:

我正在开发一个使用 AVPlayer 流式传输实时媒体的 ios 应用程序。通过 Airplay 连接到 Apple TV 时,可以使用 Apple TV 遥控器暂停和恢复内容。

我正在寻找禁用此功能的方法。

我尝试过使用:- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent,它适用于耳机远程和锁屏控制事件,但不适用于 Apple TV。

我也尝试过使用MPRemoteCommandCenter,它也不会拦截来自 Apple TV 的事件。

【问题讨论】:

您已经找到解决方案了吗? 我的理解是不可能做到这一点。由于直播是分段提供的,因此可以在这些分段中进行搜索以及暂停和播放。 【参考方案1】:

我是来实现这个AVPlayerController的。尚未在设备中进行测试。

首先在 AVPlayercontroller 中实现播放/暂停手势:

UITapGestureRecognizer *tapGestureRec = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(PlayPause)];
tapGestureRec.allowedPressTypes = @[@(UIPressTypePlayPause)];
[self.playerViewController.view addGestureRecognizer: tapGestureRec];

实现手势方法并始终从中调用播放方法:

-(void)PlayPause 
    [self.playerViewController.player play];
    NSLog(@"Do Anything or Nothing");

还添加观察者来捕捉第一次按下暂停按钮:

[player addObserver: self forKeyPath: @"rate" options: (NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial) context: nil];

然后在“rate”观察者的暂停事件中调用播放器播放方法:

// When rate is 0.0, it means the player has stopped
if (![self.player rate]) 
     if(self.isLiveStream) 
         [self.playerViewController.player play]; // Disable pause in Live stream
     

viewDidLoad 中,将线性播放标志设置为 true 以禁用搜索控件:

self.playerViewController.requiresLinearPlayback = true;

【讨论】:

以上是关于如何禁用暂停/播放通过 Airplay 连接到 Apple TV 的 AVPlayer 的功能的主要内容,如果未能解决你的问题,请参考以下文章

自定义视图上的 AirPlay 按钮

列出并连接到没有 MPVolumeView 的播放设备

AVPlayer 不能与 AirPlay 一起使用

带有多个 AVPlayer 实例的 AirPlay

音频路由按钮 - AirPlay

使用allowExternalPlayback禁用Airplay,但音频仍在播放