2016-04-25 10 views
0

録画したセッションを録画した後に全画面で再生しようとしています。 「スナップチャット」のようなもの。AVCaptureで録画されたコンテンツを再生します

ビデオ再生をUIViewで録画して再生することはできますが、「再生」、「完了」、「停止」ボタンが表示されます。私はそれを望んでいない。私はそれがスナッチのように見えるようにしたい。

これは私のコードで、私は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は問題があなたのコントロールのスタイルは、デフォルトでは、コントロールボタンを表示する埋め込まに設定されているiOSの9のために廃止されました。コントロールを削除するにはMPMovieControleStyle.Noneを使用してください。

詳細については、MPMovieControlStyleのマニュアルを参照してください。

+0

助けていただきありがとうございます。しかし、MPMoviePlayerControllerがiOS用に廃止された現在、代替ソリューションがありますか? –

+0

代わりにAVPictureInPictureControllerを使用してください。また、私が助けてくれた場合、私の答えをアップアップするのではなく、私の答えを選択することを確認してください:) –

+0

よく、それは助けられましたが、それでもまだありません:) 私がしようとしているのはこれを作ることです:moviePlayer = MPMoviePlayerController contentURL:receivedURL) のMoviePlayer .movi​​eSourceType = MPMovieSourceType.Unknown のMoviePlayer .view.frame = view.bounds のMoviePlayer .scalingMode = MPMovieScalingMode.AspectFill のMoviePlayer .controlStyle = MPMovieControlStyle.None のMoviePlayer .shouldAutoplay =真 !!!!! moviePlayer?.setFullscreen(true、animated:true) moviePlayer!.play() ただしAVPlayerViewcontroller()を使用していますが、 –

関連する問題