2016-04-25 3 views
0

Я пытаюсь воспроизвести записанный сеанс на полном экране после того, как он является рекордером. Вид типа "snapchat".воспроизведение записанного содержимого в AVCapture

Я могу записывать и воспроизводить видеозапись обратно в UIView, но она отображается кнопками «play», «Done» «Stop». Я не хочу этого. Я хочу, чтобы это выглядело как snapchat.

Это мой код, где я нашел Here, но я немного изменил его. :)

import UIKit 
import AVFoundation 
import AssetsLibrary 
import Photos 
import MediaPlayer 
import AVKit 

class Camera: UIViewController, AVCaptureFileOutputRecordingDelegate { 


@IBOutlet var cameraView: UIView! 
var previewLayer : AVCaptureVideoPreviewLayer? 
var captureDevice:AVCaptureDevice! 
var CamChoser = false 

var moviePlayer: MPMoviePlayerController? 
@IBOutlet weak var playback: UIView! 

@IBOutlet weak var exitCameraModeButton: UIButton! 
@IBAction func exitCameraModeButton(sender: AnyObject) { 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 


var captureSession = AVCaptureSession() 

lazy var cameraDevice: AVCaptureDevice? = { 
    let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo) as! [AVCaptureDevice] 
    return devices.filter{$0.position == .Front}.first 
}() 

lazy var micDevice: AVCaptureDevice? = { 
    return AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeAudio) 
}() 

var movieOutput = AVCaptureMovieFileOutput() 

private var tempFilePath: NSURL = { 

    let tempPath = NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent("tempMovie").URLByAppendingPathExtension("mp4").absoluteString 
    if NSFileManager.defaultManager().fileExistsAtPath(tempPath) { 
     do { 
      try NSFileManager.defaultManager().removeItemAtPath(tempPath) 
     } catch { } 
    } 
    return NSURL(string: tempPath)! 
}() 

private var library = ALAssetsLibrary() 
//private var library = PHPhotoLibrary() 

@IBOutlet weak var switchCameraButton: UIButton! 
@IBAction func switchCameraButton(sender: AnyObject) { 
    //startSession() 
} 



override func viewDidLoad() { 
    super.viewDidLoad() 

    //start session configuration 

    captureSession.beginConfiguration() 
    captureSession.sessionPreset = AVCaptureSessionPresetHigh 

    let devices = AVCaptureDevice.devices() 
    startSession() 
} 

func startSession() { 

    // add device inputs (front camera and mic) 
    print(CamChoser) 

     captureSession.addInput(deviceInputFromDevice(cameraDevice)) 
     captureSession.addInput(deviceInputFromDevice(micDevice)) 

     // add output movieFileOutput 
     movieOutput.movieFragmentInterval = kCMTimeInvalid 
     captureSession.addOutput(movieOutput) 

     // start session 
     captureSession.commitConfiguration() 
     previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
     self.cameraView.layer.addSublayer(previewLayer!) 
     self.cameraView.bringSubviewToFront(self.exitCameraModeButton) 
     self.cameraView.bringSubviewToFront(self.switchCameraButton) 
     previewLayer?.frame = self.cameraView.layer.frame 
     captureSession.startRunning() 
} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    print("touch") 
    // start capture 

    movieOutput.startRecordingToOutputFileURL(tempFilePath, recordingDelegate: self) 

} 

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    print("release") 
    //stop capture 
    movieOutput.stopRecording() 

    let videoUrl = movieOutput.outputFileURL 
    moviePlayer = MPMoviePlayerController(contentURL: videoUrl) 
    moviePlayer!.movieSourceType = MPMovieSourceType.Unknown 
    moviePlayer!.view.frame = playback.bounds 
    moviePlayer!.scalingMode = MPMovieScalingMode.AspectFill 
    moviePlayer!.controlStyle = MPMovieControlStyle.Embedded 
    moviePlayer!.shouldAutoplay = true 

    playback.addSubview((moviePlayer?.view)!) 
    //moviePlayer!.prepareToPlay() 
    moviePlayer?.setFullscreen(true, animated: true) 
    moviePlayer!.play() 
    cameraView.bringSubviewToFront(playback) 




} 

private func deviceInputFromDevice(device: AVCaptureDevice?) -> AVCaptureDeviceInput? { 
    guard let validDevice = device else { return nil } 
    do { 
     return try AVCaptureDeviceInput(device: validDevice) 
    } catch let outError { 
     print("Device setup error occured \(outError)") 
     return nil 
    } 
} 

func captureOutput(captureOutput: AVCaptureFileOutput!, didStartRecordingToOutputFileAtURL fileURL: NSURL!, fromConnections connections: [AnyObject]!) { 
} 

func captureOutput(captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError!) { 
    if (error != nil) { 
     print("Unable to save video to the iPhone \(error.localizedDescription)") 
    } else { 
     // save video to photo album 
     library.writeVideoAtPathToSavedPhotosAlbum(outputFileURL, completionBlock: { (assetURL: NSURL?, error: NSError?) -> Void in 
      if (error != nil) { 
       print("Unable to save video to the iPhone \(error!.localizedDescription)") 
      } 
     }) 

    } 

} 

}

ответ

1

Только так вы знаете, MPMoviePlayerController устаревшим для прошивкой 9. Вопрос ваш стиль управления установлен встроенный, который по умолчанию отображает кнопки управления. Используйте MPMovieControleStyle.None, чтобы удалить элементы управления.

Для получения более подробной информации см. Документацию MPMovieControlStyle.

+0

Благодарим вас за помощь, но есть ли альтернативное решение, когда MPMoviePlayerController устарел для iOS? –

+0

Вместо этого используйте AVPictureInPictureController. Кроме того, убедитесь, что вы выбрали мой ответ вместо того, чтобы его перенести, если я помог :) –

+0

ну .. это вроде помогло, но все равно не было :) Я пытаюсь сделать это: moviePlayer = MPMoviePlayerController (contentURL: receivedURL) MoviePlayer .movieSourceType = MPMovieSourceType.Unknown MoviePlayer .view.frame = view.bounds MoviePlayer .scalingMode = MPMovieScalingMode.AspectFill MoviePlayer .controlStyle = MPMovieControlStyle.None MoviePlayer .shouldAutoplay = истинный !!!! view.addSubview ((moviePlayer? .view)!) moviePlayer? .setFullscreen (true, animated: true) moviePlayer! .play() , но с AVPlayerViewcontroller() –

Смежные вопросы