我正在使用AVPlayer(我不需要,但我想要流式传输并尽快开始播放)来播放m4a文件(这是iTunes音频预览)。只是我只想让它播放文件的一部分。我可以设置开始时间,但不能设置结束时间。
使用计时器不工作,因为我使用URL作为http地址。我在加载时播放,没有下载文件。
我也看到了解决方案在Objective-C中使用KVO知道音乐何时开始播放,但我认为这不是最好的方法,因为我使用swift,也因为可能发生的故障,所以歌曲不会在正确的时刻停止。
你可以添加一个addBoundaryTimeObserverForTimes到你的AVPlayer,如下所示:
更新: Xcode 3.1 8.3.2•斯威夫特
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")
}
}