ios Swift - 拍摄的视频不宽

时间:2016-12-29 18:35:12

标签: ios swift video playback

我使用的是Swift 2.3。

我正在创建一个可以录制和播放视频的应用。我遇到的问题是录制视频的播放以非常窄的宽度显示(参见屏幕截图)。

我认为问题与视频的捕获方式有关。

如何让播放使用整个视图而不会扭曲它?

我提供了4项供审核:

  1. captureVideo(),用于启动摄像头捕获视频
  2. playVideo(),用于播放刚捕获的视频。请注意,在捕获视频并将其用于播放时,会设置self.videoAsset
  3. 保存视频的扩展程序
  4. 保存视频时调用的videoWasSavedSuccessfully()方法。此方法设置self.videoAsset,用于播放视频
  5. 1。 captureVideo()
    捕获视频的方法

    private func captureVideo() {
    if (UIImagePickerController.isSourceTypeAvailable(.Camera))  
      {
    
        if   UIImagePickerController.availableCaptureModesForCameraDevice(.Rear) != nil
    
      {
    
        self.howWasVideoProvided = .TakenWithCamera
    
        self.imagePickerController.sourceType = .Camera
        self.imagePickerController.mediaTypes = [kUTTypeMovie as String]
        self.imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureMode.Video
        self.imagePickerController.videoMaximumDuration = Globals.videoMaximumDuration
    
        self.presentViewController(self.imagePickerController, animated: true, completion: {})
      }
    }
    

    2。的playVideo()
    使用self.videoAsset播放视频的方法,该视频在保存视频时设置

    @IBAction func playVideo(sender: UIButton)
    
    {
    
      if self.videoAsset != nil
      {
        let playerItem = AVPlayerItem(asset: self.videoAsset!)
    
        // Play the video
        let player = AVPlayer(playerItem: playerItem)
    
        let playerViewController = AVPlayerViewController()
        playerViewController.player = player
    
        self.presentViewController(playerViewController, animated: true, completion: { () -> Void in
          playerViewController.player!.play()
    
        })
    
      }
    }
    

    第3。保存视频的扩展程序
    当调用self.videoWasSavedSuccessfully()时,它将设置self.videoAsset,用于播放视频

    extension MaintainVideoContentTableViewController:     UIImagePickerControllerDelegate, UINavigationControllerDelegate
    
    {
    
    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
    
    {
    
    if let videoNSURL = (info[UIImagePickerControllerMediaURL] as? NSURL)
    {
      let videoAsset = AVAsset(URL: videoNSURL)
    
      let duration = videoAsset.duration
    
      if round(CMTimeGetSeconds(duration)) <= Globals.videoMaximumDuration
      {
        if let relativePath = videoNSURL.relativePath
        {
          // Save video to the main photo album
          let selectorToCall = #selector(MaintainVideoContentTableViewController.videoWasSavedSuccessfully(_:didFinishSavingWithError:context:))
    
          self.videoNSURL = videoNSURL
    
          if self.howWasVideoProvided == .TakenWithCamera
          {
            UISaveVideoAtPathToSavedPhotosAlbum(relativePath, self, selectorToCall, nil)
          }
    
          self.imagePickerController.dismissViewControllerAnimated(true, completion: {
            // Anything you want to happen when the user saves an video
          })
        }
      }
    }
    }
    }
    

    4。 videoWasSavedSuccessfully()
    保存视频时调用的方法。它将设置self.videoAsset,用于播放视频

    func videoWasSavedSuccessfully(video: String, didFinishSavingWithError     error: NSError!, context: UnsafeMutablePointer<()>)
    
    
    {
        if error == nil {
            if let videoNSURL = self.videoNSURL
            {
            self.videoAsset = AVAsset(URL: videoNSURL)
            }
        }
    } 
    

    image captured and replayed view phone

0 个答案:

没有答案