斯威夫特IOS录制视频和音频AVFoundation
问题描述:
我能够通过以下这个问题 here斯威夫特IOS录制视频和音频AVFoundation
基本上
- 从
AVCaptureFileOutputRecordingDelegate
原型 - 循环继承可用的设备 成功抢录像
- 用相机创建会话
- 开始记录
- 停止录制
- 通过实施上述原型的方法
获取录制视频,但该文件不自带的音频。
据this问题,我不得不单独录制音频和使用提到的类
合并的视频和音频,但我不知道如何同时实现视频和音频录制。
for device in devices {
// Make sure this particular device supports video
if (device.hasMediaType(AVMediaTypeVideo)) {
// Finally check the position and confirm we've got the back camera
if(device.position == AVCaptureDevicePosition.Back) {
captureDevice = device as? AVCaptureDevice
if captureDevice != nil {
print("Capture device found")
beginSession()
}
}
}
}
在这个循环
唯一可用的设备类型是.Front和.Back
答
找到了答案,这个答案去与this代码
它可以简单地通过
- 宣告完成另一个捕获设备变量
- 通过设备循环并初始化摄像头和音频捕获设备可变
- 添加音频输入会话
代码
var captureDevice : AVCaptureDevice?
var captureAudio :AVCaptureDevice?
遍历设备和初始化捕获设备
var captureDeviceVideoFound: Bool = false
var captureDeviceAudioFound:Bool = false
// Loop through all the capture devices on this phone
for device in devices {
// Make sure this particular device supports video
if (device.hasMediaType(AVMediaTypeVideo)) {
// Finally check the position and confirm we've got the front camera
if(device.position == AVCaptureDevicePosition.Front) {
captureDevice = device as? AVCaptureDevice //initialize video
if captureDevice != nil {
print("Capture device found")
captureDeviceVideoFound = true;
}
}
}
if(device.hasMediaType(AVMediaTypeAudio)){
print("Capture device audio init")
captureAudio = device as? AVCaptureDevice //initialize audio
captureDeviceAudioFound = true
}
}
if(captureDeviceAudioFound && captureDeviceVideoFound){
beginSession()
}
session里面
try captureSession.addInput(AVCaptureDeviceInput(device: captureDevice))
try captureSession.addInput(AVCaptureDeviceInput(device: captureAudio))
这将输出带有音频的视频文件。无需合并音频或做任何事情。
这苹果文档helps
答
录制有声短片
//Get Video Device
if let devices = AVCaptureDevice.devices(withMediaType: AVMediaTypeVideo) as? [AVCaptureDevice] {
for device in devices {
if device.hasMediaType(AVMediaTypeVideo) {
if device .position == AVCaptureDevicePosition.back{
videoCaptureDevice = device
}
}
}
if videoCaptureDevice != nil {
do {
// Add Video Input
try self.captureSession.addInput(AVCaptureDeviceInput(device: videoCaptureDevice))
// Get Audio Device
let audioInput = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeAudio)
//Add Audio Input
try self.captureSession.addInput(AVCaptureDeviceInput(device: audioInput))
self.previewLayer = AVCaptureVideoPreviewLayer(session: self.captureSession)
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer.connection.videoOrientation = AVCaptureVideoOrientation.portrait
self.videoView.layer.addSublayer(self.previewLayer)
//Add File Output
self.captureSession.addOutput(self.movieOutput)
captureSession.startRunning()
}catch {
print(error)
}
更多详细信息请点击此链接:
https://medium.com/@santhosh3386/ios-avcapturesession-record-video-with-audio-23c8f8c9a8f8
答
我也有这个问题,但是当我分组后添加视频输入和声音输入后,音频工作。这是我添加输入的代码。
if (cameraSession.canAddInput(deviceInput) == true && cameraSession.canAddInput(audioDeviceInput) == true) {//detects if devices can be added
cameraSession.addInput(deviceInput)//adds video
cameraSession.addInput(audioDeviceInput)//adds audio
}
此外,我发现你必须先有视频输入,否则将不会有音频。我原本有两个if语句,但我发现把它们放在一起可以让视频和音频一起录制。希望这可以帮助。