如何使用swift仅传输已知持续时间的音频

Luc*_*cas 2 iphone itunes-store ios avplayer swift

我正在使用AVPlayer(我不需要,但我想流式传输并尽快开始播放)播放m4a文件(这是iTunes音频预览).只有我只想让它播放该文件的一部分.我可以设置开始时间而不是结束时间.

使用计时器不起作用,因为我使用URL作为http地址.我正在加载,而不下载文件.

我还看到Objective-C中的解决方案使用KVO知道音乐什么时候开始播放但是我认为这不是最好的方法,因为我使用swift并且还因为可能出现的故障所以歌曲不会停留在正确的时刻.

Leo*_*bus 7

您可以将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")
    }
}
Run Code Online (Sandbox Code Playgroud)