如何使用swift只在已知的时间内stream式传输audio

我使用的AVPlayer(我不需要,但我想stream,尽快开始播放)播放m4a文件(这是一个iTunesaudio预览)。 只有我只想让它扮演那个文件的一部分。 我可以设置开始时间,但不是结束时间。

使用计时器不起作用,因为我使用URL作为http地址。 我正在玩,因为它没有下载文件。

我也看到了Objective-C中的解决scheme,使用KVO来了解音乐什么时候开始播放,但我认为这不是最好的方法,因为我使用的是快捷方式,也是因为可能发生的故障,所以歌曲不会停在正确的时刻。

任何帮助? 任何build议? 谢谢

你可以添加一个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") } }