AVFoundation、SwiftUI:会话启动,但文件未写入以记录视频。
创始人
2024-11-13 01:00:40
0

我们可以使用以下代码示例解决此问题:

在SwiftUI中添加一个自定义视图,用于捕获视频并将其保存到设备的本地文件中。

import SwiftUI
import AVFoundation

struct CameraView: View {
    
    @StateObject var viewModel: CameraViewModel
    
    var body: some View {
        ZStack {
            CameraPreviewView(session: viewModel.session)
            VStack {
                Spacer()
                HStack {
                    RecordButtonView(viewModel: viewModel)
                        .padding()
                    Spacer()
                }
            }
        }
    }
}

class CameraViewModel: NSObject, ObservableObject, AVCaptureFileOutputRecordingDelegate {

    let session: AVCaptureSession
    var videoFileOutput: AVCaptureMovieFileOutput?
    var recording = false
    var videoURL: URL?
    
    init(session: AVCaptureSession) {
        self.session = session
        super.init()
        self.videoFileOutput = AVCaptureMovieFileOutput()
        if self.session.canAddOutput(self.videoFileOutput!) {
            self.session.addOutput(self.videoFileOutput!)
        }
    }
    
    func startRecording() {
        let fileURL = URL(fileURLWithPath: NSTemporaryDirectory() + "output.mov")
        self.videoFileOutput?.startRecording(to: fileURL, recordingDelegate: self)
        self.recording = true
        self.videoURL = fileURL
    }
    
    func stopRecording() {
        self.videoFileOutput?.stopRecording()
        self.recording = false
    }
    
    func fileOutput(_ output: AVCaptureFileOutput,
                    didFinishRecordingTo outputFileURL: URL,
                    from connections: [AVCaptureConnection],
                    error: Error?) {
        if let error = error {
            print(error.localizedDescription)
        } else {
            UISaveVideoAtPathToSavedPhotosAlbum(outputFileURL.path, nil, nil, nil)
        }
    }
}

struct CameraPreviewView: UIViewRepresentable {
    
    let session: AVCaptureSession
    
    func makeUIView(context: Context) -> UIView {
        let view = UIView(frame: .zero)
        
        if let previewLayer = AVCaptureVideoPreviewLayer(session: session) {
            previewLayer.videoGravity = .resizeAspectFill
            previewLayer.connection?.videoOrientation = .portrait
            view

相关内容

热门资讯

事发当天!上饶辅助设备出租,真... 事发当天!上饶辅助设备出租,真是是真的辅助工具(有挂头条)-哔哩哔哩上饶辅助设备出租脚本下载中分为三...
随着!菠萝神辅助器app,一直... 随着!菠萝神辅助器app,一直是有辅助平台(有挂教程)-哔哩哔哩1、很好的工具软件,可以解锁游戏的菠...
推出新举措!兴动海满辅助,一贯... 您好,兴动海满辅助这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩家在...
做出回应!微乐贵阳捉鸡麻将挂软... 做出回应!微乐贵阳捉鸡麻将挂软件,果然真的是有辅助神器(有挂秘诀)-哔哩哔哩1、打开软件启动之后找到...
反观!九游破解辅助插件,都是真... 反观!九游破解辅助插件,都是真的有辅助神器(有挂秘籍)-哔哩哔哩九游破解辅助插件能透视中分为三种模型...
据文件显示!科米台州麻将辅助,... 据文件显示!科米台州麻将辅助,真是有挂辅助app(竟然有挂)-哔哩哔哩1、每一步都需要思考,不同水平...
今天上午!赣湘互娱挂,总是是有... 今天上午!赣湘互娱挂,总是是有辅助修改器(有挂详情)-哔哩哔哩1、在赣湘互娱挂插件功能辅助器技巧中,...
来临!广西友乐解码器辅助器,原... 来临!广西友乐解码器辅助器,原来真的是有辅助脚本(真的有挂)-哔哩哔哩1.广西友乐解码器辅助器 选牌...
来临!新天道辅助脚本,确实有挂... 来临!新天道辅助脚本,确实有挂辅助下载(有挂秘诀)-哔哩哔哩1、金币登录送、破产送、升级送、活动送。...
近期!青橙竞技卡五星辅助,好像... 近期!青橙竞技卡五星辅助,好像真的是有辅助脚本(竟然有挂)-哔哩哔哩1、用户打开应用后不用登录就可以...