我想从远程服务器加载视频。这是非常简单的工作,并通过以下代码解决:
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。 感谢。