要解决这个问题,你需要确保在播放视频之前先把视频加载到AVPlayer中。下面是一个示例代码:
import UIKit
import AVKit
import AVFoundation
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
var player: AVPlayer?
var playerViewController: AVPlayerViewController?
override func viewDidLoad() {
super.viewDidLoad()
}
func playVideo() {
guard let videoURL = // 获取UIImagePickerController返回的视频URL else {
return
}
player = AVPlayer(url: videoURL)
playerViewController = AVPlayerViewController()
playerViewController?.player = player
present(playerViewController!, animated: true) {
self.player?.play()
}
}
func openImagePicker() {
let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .photoLibrary
imagePicker.mediaTypes = ["public.movie"]
present(imagePicker, animated: true, completion: nil)
}
// UIImagePickerControllerDelegate方法
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let videoURL = info[.mediaURL] as? URL {
player?.pause() // 如果正在播放其他视频,先暂停
player = nil // 释放之前的player
playerViewController?.dismiss(animated: true, completion: nil)
playVideo()
}
picker.dismiss(animated: true, completion: nil)
}
}
在这个示例中,创建了一个AVPlayer和一个AVPlayerViewController实例来播放视频。当用户选择视频后,imagePickerController(_:didFinishPickingMediaWithInfo:)方法会被调用,其中的代码会先暂停之前的视频播放,并释放之前的AVPlayer实例,然后再重新加载新的视频并播放。