AVAssetWriter无法同时录制音频和视频 | 崩溃
创始人
2024-11-12 20:30:25
0次

问题描述: 当使用AVAssetWriter同时录制音频和视频时,应用程序崩溃。

解决方法: 可以使用AVCaptureSession来同时录制音频和视频,避免AVAssetWriter无法处理音频和视频的同时写入。

以下是一个示例代码,展示了如何使用AVCaptureSession来同时录制音频和视频:

import AVFoundation

class Recorder {
    var captureSession: AVCaptureSession?
    var videoOutput: AVCaptureMovieFileOutput?
    var audioOutput: AVCaptureAudioDataOutput?
    
    func startRecording() {
        captureSession = AVCaptureSession()
        
        guard let captureSession = captureSession else { return }
        
        // 添加音频输入
        let audioDevice = AVCaptureDevice.default(for: .audio)
        guard let audioInput = try? AVCaptureDeviceInput(device: audioDevice!) else { return }
        if captureSession.canAddInput(audioInput) {
            captureSession.addInput(audioInput)
        }
        
        // 添加视频输入
        let videoDevice = AVCaptureDevice.default(for: .video)
        guard let videoInput = try? AVCaptureDeviceInput(device: videoDevice!) else { return }
        if captureSession.canAddInput(videoInput) {
            captureSession.addInput(videoInput)
        }
        
        // 添加音频输出
        audioOutput = AVCaptureAudioDataOutput()
        if captureSession.canAddOutput(audioOutput!) {
            captureSession.addOutput(audioOutput!)
        }
        
        // 添加视频输出
        videoOutput = AVCaptureMovieFileOutput()
        if captureSession.canAddOutput(videoOutput!) {
            captureSession.addOutput(videoOutput!)
        }
        
        // 设置录制方向
        let connection = videoOutput?.connection(with: .video)
        connection?.videoOrientation = .portrait
        
        // 开始录制
        let outputPath = NSTemporaryDirectory() + "output.mov"
        let outputURL = URL(fileURLWithPath: outputPath)
        videoOutput?.startRecording(to: outputURL, recordingDelegate: self)
        
        captureSession.startRunning()
    }
    
    func stopRecording() {
        videoOutput?.stopRecording()
        captureSession?.stopRunning()
    }
}

extension Recorder: AVCaptureFileOutputRecordingDelegate {
    func fileOutput(_ output: AVCaptureFileOutput, didStartRecordingTo fileURL: URL, from connections: [AVCaptureConnection]) {
        // 录制开始
    }
    
    func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
        // 录制结束
    }
}

使用上述代码,可以在开始录制时调用startRecording()方法,在结束录制时调用stopRecording()方法。同时录制音频和视频,并且避免了AVAssetWriter无法处理同时写入音频和视频的问题。

相关内容

热门资讯

总算明白透视挂!全盛辅助透视挂... 总算明白透视挂!全盛辅助透视挂,微乐江西麻将真的是有外挂,好像有挂透明挂一、微乐江西麻将可以开透视的...
一分钟了解透视挂!星悦广西麻将... 一分钟了解透视挂!星悦广西麻将辅助透视挂,趣味麻将真的是有外挂,果然有人有挂在进入星悦广西麻将软件靠...
截至发稿透视挂!江城互娱辅助透... 截至发稿透视挂!江城互娱辅助透视挂,山西大唐真的有外挂,本来了解有挂1、江城互娱辅助软件下载优化,江...
玩家爆料开挂!益友辅助透视挂,... 玩家爆料开挂!益友辅助透视挂,和和麻将真的是有外挂,一贯有挂秘笈1、益友模拟器是什么优化,益友俱乐部...
关于透视挂!天天互娱辅助透视挂... 关于透视挂!天天互娱辅助透视挂,星乐麻将确实有外挂,其实真的有挂1、天天互娱有没有辅助教程、天天互娱...
推荐一款辅助!顺河辅助透视挂,... 推荐一款辅助!顺河辅助透视挂,熊猫四川麻将真的是有外挂,确实有挂总结1)熊猫四川麻将有没有挂:进一步...
这一现象值得深思辅助!欢乐耍大... 这一现象值得深思辅助!欢乐耍大牌辅助透视挂,越乡游义乌麻将存在有外挂,一贯有挂解密1、下载好越乡游义...
盘点十款透视挂!战地辅助透视挂... 盘点十款透视挂!战地辅助透视挂,扎西茶楼存在有外挂,确实真的有挂1、任何扎西茶楼透视是真的假的的玩家...
一分钟揭秘辅助!趣享时光辅助透... 一分钟揭秘辅助!趣享时光辅助透视挂,营口52麻将是真的有外挂,确实有人有挂趣享时光脚本下载中分为三种...
现有关情况通报如下辅助!皮皮跑... 现有关情况通报如下辅助!皮皮跑胡子辅助透视挂,广西麻将存在有外挂,本来发现有挂该软件可以轻松地帮助玩...