我使用的是Swift 2.3。
我正在创建一个可以录制和播放视频的应用。我遇到的问题是录制视频的播放以非常窄的宽度显示(参见屏幕截图)。
我认为问题与视频的捕获方式有关。
如何让播放使用整个视图而不会扭曲它?
我提供了4项供审核:
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)
}
}
}