如何从URLSession将视频缓冲区加载到AVPlayer?

时间:2018-06-18 09:30:45

标签: swift macos macos-sierra

我想从远程服务器加载视频。这是非常简单的工作,并通过以下代码解决:

let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let player = AVPlayer(url: videoURL!)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.bounds
playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
self.view.layer?.addSublayer(playerLayer)
player.play()

有时候我应该加载一个损坏的视频并用0x00替换前两个字节来修复它。为了解决这个问题,我尝试通过URLSession加载视频,获取数据(用缓冲区做一些动作)和init AVPlayer。但什么都没发生。

let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let urlRequest = URLRequest(url: videoURL!)
urlSession.dataTask(with: urlRequest) { (data, _, error) in
    print("got mp4 file")
    let movie = AVMovie(data: data!, options: nil)
    let item = AVPlayerItem(asset: movie)
    let player = AVPlayer(playerItem: item)
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
    DispatchQueue.main.async {
        playerLayer.frame = self.view.bounds
        self.view.layer?.addSublayer(playerLayer)
        player.play()
    }
}.resume()

怀疑我试图通过非主线程添加playerLayout。我添加了 DispatchQueue.main.async 构造,但问题仍然存在。 这将是一个macOS软件,而不是iOS。 感谢。

0 个答案:

没有答案