2015-08-18 5 views
2

Я использую AVPlayer (мне не нужно, но я хочу его воспроизвести и как можно скорее начну играть), чтобы воспроизвести файл m4a (это аудио iTunes предварительный просмотр). Только я хочу, чтобы он играл часть этого файла. Я могу установить время начала, но не время окончания.Как передавать аудио только на известную длительность, используя swift

Использование таймера не работает, потому что я использую URL как http-адрес. Я играю, когда загружается, не загружая файл.

Я также видел решения в Objective-C, чтобы использовать KVO, чтобы знать, когда музыка начинает играть, но я думаю, что это не лучший подход, поскольку я использую быстро, а также из-за сбоев, которые могут произойти, поэтому песня будет не останавливаться в нужный момент.

ответ

6

Вы можете добавить addBoundaryTimeObserverForTimes к вашему AVPlayer следующим образом:

обновление: Xcode 8.3.2 • Swift 3,1

import UIKit 
import AVFoundation 

class ViewController: UIViewController { 
    var player: AVPlayer! 
    var observer: Any! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     guard let url = URL(string: "https://www.example.com/audio.mp3") else { return } 
     player = AVPlayer(url: url) 
     let boundary: TimeInterval = 30 
     let times = [NSValue(time: CMTimeMake(Int64(boundary), 1))] 
     observer = player.addBoundaryTimeObserver(forTimes: times, queue: nil) { 
      [weak self] time in 
      print("30s reached") 
      if let observer = self?.observer { 
       self?.player.removeTimeObserver(observer) 
      } 
      self?.player.pause() 
     } 
     player.play() 
     print("started loading") 
    } 
} 
+0

спасибо! он отлично работает с временем жесткого кодирования. Но я попробовал audioPlayer.addBoundaryTimeObserverForTimes ([CMTimeMake (Int64 (timeInterval), 1)], queue: dispatch_get_main_queue()) {но это не сработает. Вы знаете, какой тип должен быть передан как параметр? – Lucas

+0

[AnyObject] Массив объектов NSValue, содержащих значения CMTime, представляющие время, в которое нужно вызвать блок. –

+0

oh нашел мою типографию – Lucas

Смежные вопросы