下载文件导致ios中流式传输的问题

use*_*811 8 iphone ios avplayer swift alamofire

我在我的应用程序中使用AVPlayer实时流媒体并且工作正常.

但是当我尝试使用下载某些文件Alamofire.downlaod method然后流停止工作.

rate财产AVPlayer就是自动归零.

我认为线程可能存在一些问题,但我没有得到它.

我的守则如下

override func viewDidLoad() {

 play_Live_Stream()
}


override func viewWillAppear() {

 Download_favourite_files()
}

func  Download_favourite_files() {
     for int i in arr_favourites{
           Alamofire.download(urlString, to: destination).response { response in
                        print(response)
          }
      }

    }

func play_Live_Stream(){
myplayerItem = AVPlayerItem(url: url as! URL)
        myPlayer = AVPlayer(playerItem: myplayerItem)
        myPlayer.volume = volume_slider.value
        PlayerObserving = true
        NotificationCenter.default.addObserver(self, selector: #selector(playInstalled(noti:)), name: NSNotification.Name.AVPlayerItemPlaybackStalled, object: myPlayer.currentItem)
        NotificationCenter.default.addObserver(self, selector: #selector(playfailed(noti:)), name: NSNotification.Name.AVPlayerItemFailedToPlayToEndTime, object: myPlayer.currentItem)
        myPlayer.currentItem?.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.new, context: nil)
        myPlayer.currentItem?.addObserver(self, forKeyPath: "timedMetadata", options: [.new,.old,.initial], context: nil)
        myPlayer.currentItem?.addObserver(self, forKeyPath: "playbackLikelyToKeepUp", options: .new, context: nil)

}

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

        if ((object! as AnyObject).isEqual(myPlayer.currentItem) && keyPath=="status"){
            if myPlayer.status == AVPlayerStatus.readyToPlay{
                print("ReadyToPlay")

                myPlayer.play()
            }
    }
Run Code Online (Sandbox Code Playgroud)

尝试2(默认NSURLSession)

func load_downloads(){
for track in arr_tracks{

                let urlString = BASE_URL + "/track/download/" + "\(track.id)"
                print("downloaded url",urlString)
                let url = NSURL(string: urlString)
                let downloadTask = backgroundSession.downloadTask(with: url as! URL)
                downloadTask.resume()
            }
        }


func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {

        let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        let destinationURLForFile = documentsURL.appendingPathComponent((downloadTask.originalRequest?.url?.lastPathComponent)! + "_" + (downloadTask.response?.suggestedFilename)!)

        let fileManager = FileManager()

        if fileManager.fileExists(atPath: destinationURLForFile.path){
        }
        else{
            do {
                try fileManager.moveItem(at: location as URL, to: destinationURLForFile as URL)
            }catch{
                print("An error occurred while moving file to destination url")
            }
        }

    }
Run Code Online (Sandbox Code Playgroud)

但它没有给我任何关于为什么流停止的信息.我也观察停滞和失败的信息,如果有的话.

小智 0

尝试在主线程上播放流。

DispatchQueue.main.async { [unowned self]
 self.play_Live_Stream()
}
Run Code Online (Sandbox Code Playgroud)