AVAssetDownloadDelegate方法未在实际设备中调用

时间:2017-05-26 09:27:25

标签: ios swift video-streaming avplayer

class StreamPlayer: NSObject {

fileprivate let sessionID = "StreamPlayerAssetDownloadURLSession"

var remoteURL: URL

var session: AVAssetDownloadURLSession!
var task: AVAssetDownloadTask?

var asset: AVURLAsset?
var player: AVPlayer?
var layer: AVPlayerLayer {
    return AVPlayerLayer(player: player)
}

weak var delegate: StreamPlayerDelegate?


init(remoteURL: URL) {

    self.remoteURL = remoteURL

    super.init()

    let config = URLSessionConfiguration.background(withIdentifier: sessionID)
    session = AVAssetDownloadURLSession(configuration: config, assetDownloadDelegate: self, delegateQueue: .main)
}

func prepareToPlay() {

    asset = AVURLAsset(url: remoteURL)
    task = session.makeAssetDownloadTask(asset: asset!, assetTitle: "", assetArtworkData: nil, options: nil)
    task!.resume()

    let playerItem = AVPlayerItem(asset: task!.urlAsset)
    player = AVPlayer(playerItem: playerItem)
}

func play() {
    player?.play()
}

}

扩展StreamPlayer:AVAssetDownloadDelegate {

func urlSession(_ session: URLSession, assetDownloadTask: AVAssetDownloadTask, didFinishDownloadingTo location: URL) {
    print(location)
}

func urlSession(_ session: URLSession, assetDownloadTask: AVAssetDownloadTask, didLoad timeRange: CMTimeRange, totalTimeRangesLoaded loadedTimeRanges: [NSValue], timeRangeExpectedToLoad: CMTimeRange) {
    print(timeRange)
}


}

我读了苹果的guide,并编写了代码。功能非常简单,可以同时播放和下载视频。我初始化播放器,调用prepareToPlay()和play()方法,并将播放器层添加到视图中,然后视频播放顺利。但这两个代表的方法从未调用过,因此我无法保存视频URL或显示缓存的进度。 有人说是因为在模拟器上运行,但是我已经尝试过模拟器或真实设备,结果是一样的。顺便说一句,我已经尝试过" mp4"和" m3u8"格式,两者都可以播放,但不会调用委托方法。有人可以告诉我,我错过了什么吗?非常感谢!

0 个答案:

没有答案