Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 实际设备中未调用AVAssetDownloadDelegate方法_Ios_Swift_Video Streaming_Avplayer - Fatal编程技术网

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

Ios 实际设备中未调用AVAssetDownloadDelegate方法,ios,swift,video-streaming,avplayer,Ios,Swift,Video Streaming,Avplayer,} 扩展StreamPlayer:AVAssetDownloadDelegate{ class StreamPlayer: NSObject { fileprivate let sessionID = "StreamPlayerAssetDownloadURLSession" var remoteURL: URL var session: AVAssetDownloadURLSession! var task: AVAssetDownloadTask? var asset: AVURLA

}

扩展StreamPlayer:AVAssetDownloadDelegate{

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()
}
我阅读苹果的,并编写代码。函数非常简单,可以同时播放和下载视频。我初始化播放器,调用prepareToPlay()和play()方法,并将播放器层添加到视图中,然后视频按预期播放。但这两个代理的方法从未调用,因此我无法保存视频URL或显示缓存的进度。
有人说这是因为在模拟器上运行,但我在模拟器或真实设备上都试过,结果是一样的。顺便说一句,我试过“mp4”和“m3u8”格式,两个都可以播放,但都没有调用代理的方法。有人可以告诉我我错过了什么吗?非常感谢!

回答了您的问题吗?此代码看起来不错,但必须在设备上运行,并且仅适用于HLS资产,例如:此代码:(需要禁用应用程序传输安全性)@RhythmicFistman谢谢。HLS资产似乎是重点。我尝试了你的url,第一个方法被调用,但关于下载进度的第二个方法仍然没有被调用。可能重复
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)
}


}