2015-11-19 2 views
0

Здесь я использую, чтобы выбрать/загрузить видео из галереи. И я пытаюсь отобразить, как просмотр на экране, используя изображение. Но не удалось отобразить выбранное видео на экране в качестве предварительного просмотра.Показать выбранное видео из галереи как предварительный просмотр

Вот мой код:

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

Пожалуйста, помогите мне. Мне нужно отобразить выбранное видео в качестве предварительного просмотра, а также, если я прикасаюсь к нему, он должен играть на одном экране. И мое видео, которое отображается, должно понравиться предварительный просмотр видеоизображения, как показано на моем изображении выше.

Спасибо!

ответ

0

Вы должны использовать 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 
} 

}