我正在用 AVFoundation 快速录制视频,但看不到 file.mp4。我不知道我是否正在录制并且保存得不好,或者我没有录制。因为我可以显示会话预览,所以所有组件都使其功能正确。我的代码是:
import UIKit
import AVFoundation
class ViewController: UIViewController, AVCaptureFileOutputRecordingDelegate {
var delegate : AVCaptureFileOutputRecordingDelegate?
@IBOutlet var imageView : UIImageView
@IBOutlet var imagePreview : UIView
var session : AVCaptureSession!
var fileOutput : AVCaptureMovieFileOutput!
var previewLayer : AVCaptureVideoPreviewLayer!
func initCamera() -> Bool {
var cameraBack : AVCaptureDevice?
var videoIn : AVCaptureDeviceInput
var devices : NSArray = AVCaptureDevice.devices()
for device: AnyObject in devices{
if device.position == AVCaptureDevicePosition.Back{
cameraBack = device as? AVCaptureDevice
}
}
delegate=self
var error : NSErrorPointer!
var deviceInput : AVCaptureInput = AVCaptureDeviceInput.deviceInputWithDevice(cameraBack, error: error) as AVCaptureInput
self.session=AVCaptureSession()
self.session.addInput(deviceInput as AVCaptureInput)
self.fileOutput = AVCaptureMovieFileOutput()
self.session.addOutput(self.fileOutput)
var previewLayer: AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer.layerWithSession(self.session) as AVCaptureVideoPreviewLayer
previewLayer.frame = self.imagePreview.bounds
self.imagePreview.layer.addSublayer(previewLayer)
self.session.startRunning()
return true
}
@IBAction func stop(sender : UIButton) {
println("Stop")
self.fileOutput.stopRecording()
}
@IBAction func record(sender : UIButton) {
var formatter: NSDateFormatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd-HH-mm-ss"
let dateTimePrefix: String = formatter.stringFromDate(NSDate())
let paths = NSSearchPathForDirectoriesInDomains(
.DocumentDirectory, .UserDomainMask, true)
let documentsDirectory = paths[0] as String
var filePath:String? = nil
var fileNamePostfix = 0
do {
filePath =
"\(documentsDirectory)/\(dateTimePrefix)-\(fileNamePostfix++).mp4"
} while (NSFileManager.defaultManager().fileExistsAtPath(filePath))
self.fileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: delegate)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.initCamera()
}
func captureOutput(captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: AnyObject[]!, error: NSError!){
recording=true
}
func captureOutput(captureOutput: AVCaptureFileOutput!, didStartRecordingToOutputFileAtURL fileURL: NSURL!, fromConnections connections: AnyObject[]!) {
recording=false
}
有什么我看不到的明显错误吗?
Thanks!!
AVCaptureFileOutput -startRecordingToOutputFileURL
需要一个NSURL
。在发布的代码中,传递的参数filePath
is a String
。尝试使用NSURL(string: filePath)
反而。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)