1

我有一个 AVQueuePlayer,我在运行时添加了一些项目。

NSArray *queue = [self.queuePlayer items];
if ([self.queuePlayer canInsertItem:sound afterItem:[queue lastObject]]) [self.queuePlayer insertItem:sound afterItem:[queue lastObject]];

初始化 AVQueuePlayer 时不添加任何项。我所做的只是一个 alloc init。我还会在他们查看负载后立即发送一条播放消息,这样当添加新项目时它会立即开始播放。

我试图让手机在新项目开始播放时振动。

我正在查看在线文档,我发现唯一有趣的事情是当项目播放到结束时发送的通知。

AVPlayerItemDidPlayToEndTimeNotification

有什么解决方法吗?

4

2 回答 2

1

AVPlayer 类参考

您可以使用键值观察来观察玩家的状态。

一些额外的细节:

为了您可以安全地添加和删除观察者,AVPlayer 序列化在调度队列上播放期间动态发生的更改通知。默认情况下,这个队列是主队列(参见 dispatch_get_main_queue)。为了确保在可能报告播放状态的动态变化时安全访问播放器的非原子属性,您必须使用接收器的通知队列序列化访问。一般情况下,这样的序列化自然是通过在主线程或者队列上调用AVPlayer的各种方法来实现的。

这是一个简单的例子。创建播放器时,注册以接收状态更改通知:

[self.queuePlayer addObserver:self forKeyPath:@"status" options:kNilOptions context:nil];   

然后,添加这个方法,它会在queuePlayer'sstatus改变时被调用:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                        change:(NSDictionary *)change context:(void *)context {
    if (object == self.queuePlayer && [keyPath isEqualToString:@"status"]) {
        if (self.queuePlayer.status == AVPlayerStatusReadyToPlay) {
            AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);
        } 
    }
}

(我不确定您想要的确切振动行为,但希望这会为您指明正确的方向。)

于 2013-06-06T18:32:25.503 回答
0

有两个看似相似的函数接受一个参数kSystemSoundID_Vibrate:

1) AudioServicesPlayAlertSound(kSystemSoundID_Vibrate); 2)AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

这两个功能都会使iPhone. 但是当您在不支持振动的设备上使用第一个功能时,它会发出哔声。另一方面,第二个功能在不受支持的设备上没有任何作用。因此,如果您要连续振动设备,就像常识所说的警报一样,请使用功能 2。

另请参阅“iPhone 教程:检查 iOS 设备功能的更好方法”一文。

首先,将AudioToolbox框架 ( AudioToolbox.framework) 添加到构建阶段中的目标。

然后,要导入的头文件:

#import <AudioToolbox/AudioServices.h>
于 2013-06-06T21:33:58.940 回答