Ios 录制 Live mic 数据无法录制和发送?

标签 ios iphone swift

import UIKit
import AVFoundation

class RecViewController: UIViewController,AVCaptureAudioDataOutputSampleBufferDelegate {

    @IBOutlet weak var recBtn: UIButton!

    let session = AVCaptureSession()
    var result: NSData?

    override func viewDidLoad() {
        super.viewDidLoad()

        self.recBtn.setTitle("RECORDING", for: .normal)
    }

    @IBAction func recBtnAction(_ sender: Any) {

        session.sessionPreset = .medium

        let mic = AVCaptureDevice.default(for: .audio)
        var mic_input: AVCaptureDeviceInput!

        let audio_output = AVCaptureAudioDataOutput()
        audio_output.setSampleBufferDelegate(self, queue: DispatchQueue.main)

        do {
            mic_input = try AVCaptureDeviceInput(device: mic!)
        } catch {
            return
        }

        if session.inputs.isEmpty {
            self.session.addInput(mic_input)
            session.addOutput(audio_output)
        }

        session.startRunning()

    }
    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {

        let block = CMSampleBufferGetDataBuffer(sampleBuffer)
        var length = 0
        var data: UnsafeMutablePointer<Int8>? = nil

        var status = CMBlockBufferGetDataPointer(block!, 0, nil, &length, &data)    // TODO: check for errors

        result = NSData(bytesNoCopy: data!, length: length, freeWhenDone: false)
    }

    @IBAction func playBtnAction(_ sender: Any) {
        // Storing the ns data and trying to play with following code but it dosent play cant hear a thing
        do {
            let audioPlayer = try AVAudioPlayer(data: result as! Data )
            audioPlayer.prepareToPlay()
            audioPlayer.play()
        } catch {
            print("Error")
        }
    }

}

我正在使用这段代码记录来自麦克风的实时数据,但是当我按下 rec 按钮时没有任何反应,它既没有记录也没有去委托(delegate)和打印那么如何解决这个问题? (已解决)

我已经更新了代码,当我尝试通过 av 音频播放器播放该 ns 数据时,它没有播放任何内容如何解决这个问题?

最佳答案

看起来您的 audio_output 实际上并没有被 recBtnAction 方法范围之外的任何内容保留。很可能您的 session 在您离开该方法时已被丢弃,因此不会为您捕获任何内容。


编辑

玩过您提供的示例代码后,您的实际问题似乎是您使用的委托(delegate)方法的签名错误。

应该是:

func captureOutput(_ output: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {
}

关于Ios 录制 Live mic 数据无法录制和发送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50917296/

相关文章:

iOS6:Twitter SetInitialText 不起作用

iphone - FileExistsAtPath 从 UIImagePickerController 返回 NO

Swift:自定义搜索栏布局问题

swift - 如何在 iOS Swift 3 中调用一些不需要的参数?

ios - 解析 json 数组 swift 返回空元素

ios - ios 9 模拟器中的 mapView 是空白的

ios - 为什么我的自定义注释图像没有显示?

iphone - UIImagePickerController 静止图像质量

iphone - 如何将 UIActivityIndi​​catorView 添加到 UITableViewCell?

ios - 以编程方式创建时不显示导航 Controller