如何在AVQueuePlayer中循环播放音频队列?

5

我知道有多个关于同一个问题的问题存在,但是在遵循这个建议后,我遇到了一些问题。

我已经设置好了一切,但每次使用kMTTimeZero时都会出现太多错误。

soundQueue = [AVQueuePlayer queuePlayerWithItems:soundEmotions];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playerItemDidReachEnd:)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:[soundEmotions lastObject]];

这是我所做的事情。
- (void)playerItemDidReachEnd:(NSNotification *)notification {
    // Do stuff here
    NSLog(@"End has been reached.");

    // Set it back to the beginning
    [soundQueue seekToTime:kCMTimeZero];

    //Replay
    [soundQueue play];

}

错误:无法识别的符号架构armv7:"_kCMTimeZero", 引用自: -[ViewController playerItemDidReachEnd:]中的ViewController.o ld:找不到符号(s)以供架构armv7使用clang:错误:链接器 命令失败,退出代码1(使用-v查看调用)

2个回答

17

kCMTimeZeroCoreMedia.framework 中的一个符号,因此您需要将该框架添加到目标的“构建阶段”中的“链接二进制文件和库”部分。


谢谢!我添加了框架,构建也很顺利,但出于某种原因它仍然不能循环播放声音。我做错了吗?谢谢! - KingPolygon
我解决了!谢谢你的帮助! - KingPolygon
@KingPolygon,你是如何让AVQueuePlayer循环播放的? - Raphael

0

我正在使用这种方法来观察最后一个项目,然后寻找kCMTimeZero

 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

        if keyPath == "currentItem" {

            print("Next Track...", currentTrackIndex)

            if currentTrackIndex > 0 {
                self.isPlaying = true
            }

            currentTrackIndex += 1
            if currentTrackIndex > playerQueue.items().count {
                currentTrackIndex = 0
                playerQueue.seek(to: kCMTimeZero)
            }
        }
    }

然后

private func observeTrackChanged(of player : AVQueuePlayer) {

        player.addObserver(self, forKeyPath: "currentItem", options: .new, context: nil)
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接