您好,我遵循了Jared Davidson的课程,使用AVFoundation创建自定义相机视图并保存图片。https://www.youtube.com/watch?v=w0O3ZGUS3pk
但是我想录制和保存视频而不是图像。有人能帮我吗?我相信这很简单,但苹果的文档是用Objective-C写的,我不能破译它。
这是我的密码谢谢。
import UIKit
import AVFoundation
class ViewController: UIViewController {
var captureSession = AVCaptureSession()
var sessionOutput = AVCaptureStillImageOutput()
var previewLayer = AVCaptureVideoPreviewLayer()
@IBOutlet var cameraView: UIView!
override func viewWillAppear(animated: Bool) {
let devices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
for device in devices {
if device.position == AVCaptureDevicePosition.Front{
do{
let input = try AVCaptureDeviceInput(device: device as! AVCaptureDevice)
if captureSession.canAddInput(input){
captureSession.addInput(input)
sessionOutput.outputSettings = [AVVideoCodecKey : AVVideoCodecJPEG]
if captureSession.canAddOutput(sessionOutput){
captureSession.addOutput(sessionOutput)
captureSession.startRunning()
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer.connection.videoOrientation = AVCaptureVideoOrientation.Portrait
cameraView.layer.addSublayer(previewLayer)
previewLayer.position = CGPoint(x: self.cameraView.frame.width / 2, y: self.cameraView.frame.height / 2)
previewLayer.bounds = cameraView.frame
}
}
}
catch{
print("Error")
}
}
}
}
@IBAction func TakePhoto(sender: AnyObject) {
if let videoConnection = sessionOutput.connectionWithMediaType(AVMediaTypeVideo){
sessionOutput.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: {
buffer, error in
let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer)
UIImageWriteToSavedPhotosAlbum(UIImage(data: imageData)!, nil, nil, nil)
})
}
}
}
7条答案
按热度按时间lh80um4z1#
您可以通过创建
AVCaptureMovieFileOutput
并将其添加到捕获会话中,并使ViewController
符合AVCaptureFileOutputRecordingDelegate
,将录制的视频保存到文件中。此示例将5秒的视频录制到output.mov应用程序的“文稿”目录中名为“www.example.com“的文件中。
jdg4fx2g2#
谢谢你。这对我很有帮助。这是一个Rhythmic Fistman的答案版本,移植到Swift 3,并带有所需的import语句和delegate方法。
ocebsuys3#
您可以使用此代码将您的视频保存在照片库中,您必须给予以下参数,其中最重要的是OutputURL.path,这是您要保存到相机胶卷相册的电影文件的文件系统路径,对于其余参数,您可以传递相应的值,也可以根据需要分配nil
a14dhokn4#
在
if (device as AnyObject).position == AVCaptureDevicePosition.front{
之后加了
谢谢
mrphzbgm5#
对于录音问题,
在创建captureSession时添加此代码
询问麦克风权限(完成时间:{(isMicrophonePermissionGiven)位于
////////////////////////////////////////////////////////////////
askMicroPhonePermission函数如下
并且您必须在info.plist文件中添加NSMicrophoneUsageDescription键值。
qyuhtwio6#
alen0pnh7#
只有一个小注意事项:(我使用的是Xcode 12.x / iOS 14.5)
假设您有一个f.,它可以打开本地dest. URL(前面示例中的代码... Documents dir..)
如果您这样做:
它起作用了,
但如果您交换:
未调用委托。
在设置输出后调用“startRunning”:
...
其中