Итак, этот код отлично работал в моем предыдущем проекте, протестированном на iPhone 5s, но когда я встроил его в свой основной проект, он не работает, он выбирает видео из галереи, показывает проигрыватель, но продолжает поиск видео (не воспроизводится это), только черный экран проигрывателя с индикатором поиска внизу и элементами управления кнопки паузы и т. д.
Кроме того, единственная ошибка, которую я получаю в окне вывода:
[1524:458877] [discovery] errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo = {NSLocalizedDescription=query cancelled}
Много искал и из одного из ответов на форумах Apple пришел к выводу, что это ни на что не влияет и лучше его игнорировать.
import UIKit
import AVKit
import AVFoundation
class GalleryVideoSelectorViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {
let ipc = UIImagePickerController()
override func viewDidLoad() {
super.viewDidLoad()
ipc.delegate=self
}
@IBAction func SelectVideo(_ sender: Any) {
ipc.sourceType = .photoLibrary
ipc.mediaTypes = ["public.movie"]
present(ipc,animated:true,completion: nil)
}
@IBAction func PlayBackVideo(_ sender: Any) {
if let videoURL = UserDefaults.standard.url(forKey: "LullabyURL") {
let player = AVPlayer(url: videoURL)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController,animated:true)
{
playerViewController.player!.play()
}
}
}
@objc func imagePickerController(_ picker:UIImagePickerController, didFinishPickingMediaWithInfo info:[String:Any])
{
ipc.dismiss(animated:true){
var videourl = info["UIImagePickerControllerReferenceURL"] as? URL
if let videoURL = videourl{
defaults.set(videoURL,forKey: "LullabyURL")
let player = AVPlayer(url:videourl!)
print (videourl!)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController,animated:true)
{
playerViewController.player!.play()
}
}
}
}
Это обновленная версия моего делегата, которая на самом деле вызывала проблему.
@objc func imagePickerController(_ picker:UIImagePickerController, didFinishPickingMediaWithInfo info:[UIImagePickerController.InfoKey:Any])
{
ipc.dismiss(animated:true){
let videourl = info[UIImagePickerController.InfoKey.mediaURL] as! URL
UserDefaults.standard.set(videourl,forKey: "LullabyURL")
let player = AVPlayer(url: videourl)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController,animated:true)
{
playerViewController.player!.play()
}
}
}
Изменено «didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]» на «didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]».
а также URL-адрес видео с «let videourl = info["UIImagePickerControllerReferenceURL"] as? URL» на «let videourl = info[UIImagePickerController.InfoKey.mediaURL] as! URL»