2016-03-05 56 views
0

我能够通过以下这个问题 here斯威夫特IOS录制视频和音频AVFoundation

基本上

  1. AVCaptureFileOutputRecordingDelegate原型
  2. 循环继承可用的设备
  3. 成功抢录像
  4. 用相机创建会话
  5. 开始记录
  6. 停止录制
  7. 通过实施上述原型的方法

获取录制视频,但该文件不自带的音频。

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

回答

1

找到了答案,这个答案去与this代码

它可以简单地通过

  1. 宣告完成另一个捕获设备变量
  2. 通过设备循环并初始化摄像头和音频捕获设备可变
  3. 添加音频输入会话

代码

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

-1

录制有声短片

//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

0

我也有这个问题,但是当我分组后添加视频输入和声音输入后,音频工作。这是我添加输入的代码。

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语句,但我发现把它们放在一起可以让视频和音频一起录制。希望这可以帮助。