2015-06-08 25 views
9

Tôi cố gắng để chọn video từ PhotoLibrary sử dụng đoạn mã sauChọn video từ PhotoLibrary trong iOS sử dụng nhanh chóng

imageController.mediaTypes = [kUTTypeMovie: NSString]

Sau khi chọn video, khi nó được nén, Tôi nhận được mảng ra khỏi vấn đề ranh giới.

Tôi đã tìm kiếm trực tuyến và tìm thấy dòng sau. Tôi không thể chuyển đổi nó sang phiên bản Swift (link) imageController.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeMovie, nil]

Vui lòng cho chúng tôi biết phiên bản nhanh cho dòng trên. Nó rất hữu ích nếu bất cứ ai có thể cung cấp phiên bản nhanh chóng của this.

question2:

Tôi muốn hiển thị video được chọn trong ứng dụng và cần phải đóng khi nó được khai thác. Chúng tôi có thể làm điều đó mà không cần các plugin bên ngoài và sử dụng thư viện tích hợp không?

Trả lời

1
func openCamera() { 
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) { 
    println("captureVideoPressed and camera available.") 

    var imagePicker = UIImagePickerController() 

    imagePicker.delegate = self 
    imagePicker.sourceType = .Camera 
    imagePicker.mediaTypes = [kUTTypeMovie!] 
    imagePicker.allowsEditing = false 

    imagePicker.showsCameraControls = true 

    self.presentViewController(imagePicker, animated: true, completion: nil) 
    } else { 
    println("Camera not available.") 
    } 
} 

func imagePickerController( didFinishPickingMediaWithInfo info:NSDictionary!) { 
    videoUrl = info[UIImagePickerControllerMediaURL] as! NSURL! 
    let pathString = videoUrl.relativePath 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 
+0

Tôi đã thử tất cả các. Ứng dụng sẽ tự động đóng sau khi nén video. Không thể tìm thấy sự cố. – NKurapati

0
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) { 
    println("Camera Available") 
    var imagePicker = UIImagePickerController() 
    imagePicker.delegate = self 
    imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary 
    imagePicker.allowsEditing = false 
    self.presentViewController(imagePicker, animated: true, completion: nil) 
} 

phương pháp đại biểu

func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!) { 
    self.dismissViewControllerAnimated(true, completion: nil) 
    imageView.image = image 
} 
+0

Tôi đã thử tất cả những điều này. Ứng dụng sẽ tự động đóng sau khi nén video. Không thể tìm thấy sự cố. – NKurapati

+0

là ứng dụng bị lỗi? –

+0

có .. Nó hiển thị lỗi dưới dạng mảng ra khỏi chỉ mục. – NKurapati

0
func startMediaBrowserFromViewController(viewController: UIViewController!, usingDelegate delegate : protocol<UINavigationControllerDelegate, UIImagePickerControllerDelegate>!) -> Bool { 
    if UIImagePickerController.isSourceTypeAvailable(.SavedPhotosAlbum) == false { 
    return false 
    } 
    let mediaUI = UIImagePickerController() 
    mediaUI.sourceType = .SavedPhotosAlbum 
    mediaUI.mediaTypes = [kUTTypeMovie as String] 
    mediaUI.allowsEditing = true 
    mediaUI.delegate = delegate 
    presentViewController(mediaUI, animated: true, completion: nil) 
    return true 
} 
16

Dựa trên Swift 2.2

Giả sử bạn có một imagePickerController và khi bạn muốn chọn cả hai hình ảnh và video:

let imagePickerController = UIImagePickerController() 
var videoURL: NSURL?  

@IBAction func selectImageFromPhotoLibrary(sender: UIBarButtonItem) { 
    imagePickerController.sourceType = .PhotoLibrary 
    imagePickerController.delegate = self 
    imagePickerController.mediaTypes = ["public.image", "public.movie"] 

    presentViewController(imagePickerController, animated: true, completion: nil)  
} 

Sau đó, sau khi video được chọn, hãy in NSURL của video đó.

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    videoURL = info["UIImagePickerControllerReferenceURL"] as? NSURL 
    print(videoURL) 
    imagePickerController.dismissViewControllerAnimated(true, completion: nil) 
} 

Đối với câu hỏi 2:

Vâng, bạn có thể làm điều đó thông qua AVPlayer, bạn cần nhập AVKit và AVFoundation, và bạn mã có thể trông như thế này:

if let videoURL = videoURL{ 
    let player = AVPlayer(URL: videoURL) 

    let playerViewController = AVPlayerViewController() 
    playerViewController.player = player 

    presentViewController(playerViewController, animated: true) { 
    playerViewController.player!.play() 
    } 
} 

tôi đã thực hiện một demo ở đây bạn có thể tham khảo, có thể không phải 100% những gì bạn muốn.

3
 @IBOutlet weak var imgView: UIImageView! 
     var imagePickerController = UIImagePickerController() 
     var videoURL : NSURL?  
    @IBAction func btnSelectVideo_Action(_ sender: Any) { 
      imagePickerController.sourceType = .savedPhotosAlbum 
      imagePickerController.delegate = self 
      imagePickerController.mediaTypes = [kUTTypeMovie as String] 
      present(imagePickerController, animated: true, completion: nil) 
     } 

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     videoURL = info[UIImagePickerControllerMediaURL]as? NSURL 
     print(videoURL!) 
     do { 
      let asset = AVURLAsset(url: videoURL as! URL , options: nil) 
      let imgGenerator = AVAssetImageGenerator(asset: asset) 
      imgGenerator.appliesPreferredTrackTransform = true 
      let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(0, 1), actualTime: nil) 
      let thumbnail = UIImage(cgImage: cgImage) 
      imgView.image = thumbnail 
     } catch let error { 
      print("*** Error generating thumbnail: \(error.localizedDescription)") 
     } 
    self.dismiss(animated: true, completion: nil) 
} 

Đối với câu hỏi 2:

let player = AVPlayer(url: videoURL) 
let playerController = AVPlayerViewController() 
playerController.player = player 
self.present(playerController, animated: true) { 
    player.play() 

    } 
2

Swift 3

import MobileCoreServices 

var imagePickerController = UIImagePickerController() 
var videoURL: URL? 

private func openImgPicker() { 
    imagePickerController.sourceType = .savedPhotosAlbum 
    imagePickerController.delegate = self 
    imagePickerController.mediaTypes = [kUTTypeMovie as NSString as String] 
    present(imagePickerController, animated: true, completion: nil) 
} 

extension YourViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     videoURL = info[UIImagePickerControllerMediaURL] as? URL 
     print("videoURL:\(String(describing: videoURL))") 
     self.dismiss(animated: true, completion: nil) 
    } 
} 
0

Cập nhật cho phiên bản hiện tại của Swift:

 // Check if the asset is of video media type. 
     guard (asset.mediaType == PHAssetMediaType.video) else { 
      print("Not a valid video media type") 
      return 
     } 

     // Obtain the URL of the video. 
     PHCachingImageManager().requestAVAsset(forVideo: asset, options: nil, resultHandler: {(asset: AVAsset?, audioMix: AVAudioMix?, info: [AnyHashable : Any]?) in 
      let asset = asset as! AVURLAsset 
      print("asset.url: ", asset.url) // Here is video URL 
      // Play the video. 
      DispatchQueue.main.async(execute: { 

       let player = AVPlayer(url: asset.url) 
       let playerViewController = AVPlayerViewController() 
       playerViewController.player = player 
       self.present(playerViewController, animated: true) { 
        playerViewController.player!.play() 
       } 
      }) 
     }) 
Các vấn đề liên quan