ios - AVplayer 不播放 iPhone 库中的视频
问题描述
所以,这段代码在我之前在 iPhone 5s 上测试过的项目中运行良好,但是当我将它嵌入到我的主项目中时它不起作用,它从图库中选择视频,显示播放器但一直在搜索视频——(不会播放它),只有黑色播放器屏幕下方带有搜索指示器和暂停按钮控件等。
我在输出窗口中得到的唯一错误是:
[1524:458877] [发现] 发现扩展时遇到错误:错误域 = PlugInKit 代码 = 13“查询已取消”用户信息 = {NSLocalizedDescription = 查询取消}
对其进行了很多搜索,并从 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 信息:[UIImagePickerController.InfoKey:Any]”更改为“didFinishPickingMediaWithInfo 信息:[UIImagePickerController.InfoKey:Any]”
和视频 URL 从“let videourl = info["UIImagePickerControllerReferenceURL"] as?URL”到“let videourl = info[UIImagePickerController.InfoKey.mediaURL] as!URL”
推荐阅读
- nlp - 意图名称对于 RASA NLU 中的 DIET 分类器是否重要?
- excel - 为什么我的索引匹配公式不起作用?
- javascript - 根据数据属性值隐藏 div
- xcode - Xcode 模板:Xcode 在哪里显示 TemplateInfo.plist 中的“Description”和“Summary”键值?
- python - 对预期会出现索引错误的函数执行测试
- html - 以模态显示对象属性
- mysql - SQL 选择表,其中包含多对多关系中的多个属性
- salesforce - 如何使用 REST 或 SOAP API 从 Salesforce 营销云获取 SMS 交付每日报告
- php - 使用 laravel 导出 Excel 中的问题
- azure - 在 adf 逻辑应用程序中使用有效负载运行时逻辑应用程序引发扩展 ajax 错误