ios - 显示从图库中选择的视频作为预览

标签 ios swift media-player

这里我用来从图库中选择/加载视频。我尝试使用 imageview 在屏幕上显示预览。但无法在屏幕上显示我选择的视频作为预览。

这是我的代码:

import UIKit
import AVFoundation
import MobileCoreServices
import AssetsLibrary
import MediaPlayer
import CoreMedia

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    var firstAsset: AVAsset?
    var loadingAssetOne = false
@IBOutlet weak var imgView: UIImageView!
    let imagePicker = UIImagePickerController()


    override func viewDidLoad() {
        super.viewDidLoad()


        imagePicker.delegate = self
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    func savedPhotosAvailable() -> Bool {
        if UIImagePickerController.isSourceTypeAvailable(.SavedPhotosAlbum) == false {
            let alert = UIAlertController(title: "Not Available", message: "No Saved Album found", preferredStyle: .Alert)
            alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Cancel, handler: nil))
            presentViewController(alert, animated: true, completion: nil)
            return false
        }
        return true
    }



    @IBAction func playvideo(sender: AnyObject) {
        if savedPhotosAvailable() {
            loadingAssetOne = true
            startMediaBrowserFromViewController(self, usingDelegate: self)
        }
        }



    func startMediaBrowserFromViewController(viewController: UIViewController, usingDelegate delegate: protocol<UINavigationControllerDelegate, UIImagePickerControllerDelegate>) -> Bool {
        // 1
        if UIImagePickerController.isSourceTypeAvailable(.SavedPhotosAlbum) == false {
            return false
        }

        // 2
        //var mediaUI = UIImagePickerController()
         imagePicker.sourceType = .SavedPhotosAlbum
         imagePicker.mediaTypes = [kUTTypeMovie as String]
         imagePicker.allowsEditing = true
         imagePicker.delegate = delegate


        // 3
        presentViewController( imagePicker, animated: true, completion: nil)
        return true
    }
    // MARK: - UIImagePickerControllerDelegate Methods
    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]){


        if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
            imgView.contentMode = .ScaleAspectFit
           imgView.image = pickedImage
        }

        dismissViewControllerAnimated(true, completion: nil)
    }

    func imagePickerControllerDidCancel(picker: UIImagePickerController) {
        dismissViewControllerAnimated(true, completion: nil)
    }
}

需要显示我的视频,如下图所示:

enter image description here

请帮帮我。我需要将我选择的视频显示为预览,并且如果我触摸它应该在同一屏幕中播放。并且我正在显示的视频应该像图像视频的预览一样,如上图所示。

谢谢!

最佳答案

您必须使用 UIView 并创建 AVPlayerLayer。

因此,代替您的 imgView 创建一个 UIView 并将 UIView 类设置为自定义类,如下所示。

import UIKit
import AVFoundation

class PlayerView: UIView {

var player: AVPlayer? {
    get {
        return playerLayer.player
    }

    set {
        playerLayer.player = newValue
    }
}

var playerLayer: AVPlayerLayer {
    return layer as! AVPlayerLayer
}

override class func layerClass() -> AnyClass {
    return AVPlayerLayer.self
}

}

关于ios - 显示从图库中选择的视频作为预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33811148/

相关文章:

swift - 在 Swift 类的泛型中使用协议(protocol)数组

ios - 在 Swift 中循环遍历 CollectionView 单元格

android - 实现安卓音乐搜索

java - 返回 Activity 时如何避免创建 MediaPlayer 的新实例

Android Media Player 挂起或返回 null

ios - 向类的实例发送 "class"消息是什么意思

objective-c - 这是传递 ManagedObjectContext 的可接受方式吗?

ios - 核心数据扩展 : insert NSManagedObject in NSManagedObjectContext

ios - 附加到字符串的内存问题

iOS 14 - 如何以编程方式打开默认邮件应用程序?