使用AVFoundation录制方形视频并添加水印

使用AVFoundation录制方形视频并添加水印,第1张

使用AVFoundation录制方形视频添加水印

一些东西:

就音频而言,您要添加视频(摄像机)输入,但不添加音频输入。这样做以获得声音。

    let audioInputDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeAudio)    do {        let input = try AVCaptureDeviceInput(device: audioInputDevice)        if sourceAVFoundation.captureSession.canAddInput(input) { sourceAVFoundation.captureSession.addInput(input)        } else { NSLog("ERROR: Can't add audio input")        }    } catch let error {        NSLog("ERROR: Getting input device: (error)")    }

为了使视频更加方形,您将不得不使用AVAssetWriter而不是AVCaptureFileOutput。这更加复杂,但是您获得了更多的“力量”。您已经创建了一个AVCaptureSession,它非常棒,要连接AssetWriter,您需要执行以下 *** 作:

    let fileManager = NSFileManager.defaultManager()    let urls = fileManager.URLsForDirectory(.documentDirectory, inDomains: .UserDomainMask)    guard let documentDirectory: NSURL = urls.first else {        print("Video Controller: getAssetWriter: documentDir Error")        return nil    }    let local_video_name = NSUUID().UUIDString + ".mp4"    self.videoOutputURL = documentDirectory.URLByAppendingPathComponent(local_video_name)    guard let url = self.videoOutputURL else {        return nil    }    self.assetWriter = try? AVAssetWriter(URL: url, fileType: AVFileTypeMPEG4)    guard let writer = self.assetWriter else {        return nil    }    //TODO: Set your desired video size here!     let videoSettings: [String : AnyObject] = [        AVVideoCodecKey  : AVVideoCodecH264,        AVVideoWidthKey  : captureSize.width,        AVVideoHeightKey : captureSize.height,        AVVideoCompressionPropertiesKey : [ AVVideoAverageBitRateKey : 200000, AVVideoProfileLevelKey : AVVideoProfileLevelH264baseline41, AVVideoMaxKeyframeIntervalKey : 90,        ],    ]    assetWriterInputCamera = AVAssetWriterInput(mediaType: AVMediaTypeVideo, outputSettings: videoSettings)    assetWriterInputCamera?.expectsMediaDataInRealTime = true    writer.addInput(assetWriterInputCamera!)    let audioSettings : [String : AnyObject] = [        AVFormatIDKey : NSInteger(kAudioFormatMPEG4AAC),        AVNumberOfChannelsKey : 2,        AVSampleRateKey : NSNumber(double: 44100.0)    ]    assetWriterInputAudio = AVAssetWriterInput(mediaType: AVMediaTypeAudio, outputSettings: audioSettings)    assetWriterInputAudio?.expectsMediaDataInRealTime = true    writer.addInput(assetWriterInputAudio!)

设置好AssetWriter之后,然后为视频和音频连接一些输出

    let bufferAudioQueue = dispatch_queue_create("audio buffer delegate", DISPATCH_QUEUE_SERIAL)    let audioOutput = AVCaptureAudioDataOutput()    audioOutput.setSampleBufferDelegate(self, queue: bufferAudioQueue)    captureSession.addOutput(audioOutput)    // Always add video last...    let videoOutput = AVCaptureVideoDataOutput()    videoOutput.setSampleBufferDelegate(self, queue: bufferVideoQueue)    captureSession.addOutput(videoOutput)    if let connection = videoOutput.connectionWithMediaType(AVMediaTypeVideo) {        if connection.supportsVideoOrientation { // Force recording to portrait connection.videoOrientation = AVCaptureVideoOrientation.Portrait        }        self.outputConnection = connection    }    captureSession.startRunning()

最后,您需要捕获缓冲区并处理这些东西…确保您使类成为AVCaptureVideoDataOutputSampleBufferDelegate和AVCaptureAudioDataOutputSampleBufferDelegate的委托

//MARK: Implementation for AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAudioDataOutputSampleBufferDelegatefunc captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {    if !self.isRecordingStarted {        return    }    if let audio = self.assetWriterInputAudio where connection.audioChannels.count > 0 && audio.readyForMoreMediaData {        dispatch_async(audioQueue!) { audio.appendSampleBuffer(sampleBuffer)        }        return    }    if let camera = self.assetWriterInputCamera where camera.readyForMoreMediaData {        dispatch_async(videoQueue!) { camera.appendSampleBuffer(sampleBuffer)        }    }}

缺少一些零碎的部分,但希望这足以让您连同文档一起弄清楚。

最后,如果要添加水印,可以通过多种方式实时完成,但一种可能的方式是修改sampleBuffer并将水印写入图像。您会在StackOverflow上找到其他与此相关的问题。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5010345.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-14
下一篇2022-11-14

发表评论

登录后才能评论

评论列表(0条)

    保存