2016-03-05 58 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語句,但我發現把它們放在一起可以讓視頻和音頻一起錄製。希望這可以幫助。