2013-03-11 27 views
5

Tôi biết nhiều câu hỏi liên quan đến cùng một vấn đề tồn tại, nhưng sau khi làm theo các đề xuất this one's, tôi đã gặp phải một số vấn đề.Làm cách nào để lặp lại hàng đợi âm thanh trong AVQueuePlayer?

Tôi đã thiết lập mọi thứ nhưng tôi gặp lỗi mach mỗi khi tôi sử dụng kMTTimeZero.

soundQueue = [AVQueuePlayer queuePlayerWithItems:soundEmotions]; 

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

Đây là những gì tôi đã làm.

- (void)playerItemDidReachEnd:(NSNotification *)notification { 
    // Do stuff here 
    NSLog(@"End has been reached."); 

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

    //Replay 
    [soundQueue play]; 

} 

ERROR: Undefined symbols for architecture armv7: "_kCMTimeZero", referenced from: -[ViewController playerItemDidReachEnd:] in ViewController.o ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Trả lời

17

kCMTimeZero là một biểu tượng trong CoreMedia.framework, do đó bạn phải thêm khuôn khổ này đến "Liên kết Binary Với thư viện" trong "Xây dựng giai đoạn" của mục tiêu của bạn.

+0

Cảm ơn bạn! Tôi đã thêm vào khung công tác và nó xây dựng tốt, nhưng vì một lý do nào đó nó vẫn không lặp lại âm thanh. Tôi có làm đúng không? Cảm ơn! – KingPolygon

+0

Tôi đã tìm ra! Cảm ơn bạn mặc dù! – KingPolygon

+0

@KingPolygon, bạn đã làm gì để tạo vòng lặp AVQueuePlayer? – Raphael

0

Tôi đang sử dụng phương pháp này để quan sát cuối cùng mục và sau đó seek to 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) 
      } 
     } 
    } 

Và sau đó

private func observeTrackChanged(of player : AVQueuePlayer) { 

     player.addObserver(self, forKeyPath: "currentItem", options: .new, context: nil) 
    } 
Các vấn đề liên quan