- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个录制视频的应用,但我需要它向用户实时显示麦克风捕获的声音的音高水平。我已经能够使用 AVCaptureSession
成功地将音频和视频录制到 MP4 .但是,当我添加 AVCaptureAudioDataOutput
到 session 并分配 AVCaptureAudioDataOutputSampleBufferDelegate
我没有收到任何错误,但是 captureOutput
一旦 session 开始,函数就永远不会被调用。
代码如下:
import UIKit
import AVFoundation
import CoreLocation
class ViewController: UIViewController,
AVCaptureVideoDataOutputSampleBufferDelegate,
AVCaptureFileOutputRecordingDelegate, CLLocationManagerDelegate ,
AVCaptureAudioDataOutputSampleBufferDelegate {
var videoFileOutput: AVCaptureMovieFileOutput!
let session = AVCaptureSession()
var outputURL: URL!
var timer:Timer!
var locationManager:CLLocationManager!
var currentMagnitudeValue:CGFloat!
var defaultMagnitudeValue:CGFloat!
var visualMagnitudeValue:CGFloat!
var soundLiveOutput: AVCaptureAudioDataOutput!
override func viewDidLoad() {
super.viewDidLoad()
self.setupAVCapture()
}
func setupAVCapture(){
session.beginConfiguration()
//Add the camera INPUT to the session
let videoDevice = AVCaptureDevice.default(.builtInWideAngleCamera,
for: .video, position: .front)
guard
let videoDeviceInput = try? AVCaptureDeviceInput(device: videoDevice!),
session.canAddInput(videoDeviceInput)
else { return }
session.addInput(videoDeviceInput)
//Add the microphone INPUT to the session
let microphoneDevice = AVCaptureDevice.default(.builtInMicrophone, for: .audio, position: .unspecified)
guard
let audioDeviceInput = try? AVCaptureDeviceInput(device: microphoneDevice!),
session.canAddInput(audioDeviceInput)
else { return }
session.addInput(audioDeviceInput)
//Add the video file OUTPUT to the session
videoFileOutput = AVCaptureMovieFileOutput()
guard session.canAddOutput(videoFileOutput) else {return}
if (session.canAddOutput(videoFileOutput)) {
session.addOutput(videoFileOutput)
}
//Add the audio output so we can get PITCH of the sounds
//AND assign the SampleBufferDelegate
soundLiveOutput = AVCaptureAudioDataOutput()
soundLiveOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "test"))
if (session.canAddOutput(soundLiveOutput)) {
session.addOutput(soundLiveOutput)
print ("Live AudioDataOutput added")
} else
{
print("Could not add AudioDataOutput")
}
//Preview Layer
let previewLayer = AVCaptureVideoPreviewLayer(session: session)
let rootLayer :CALayer = self.cameraView.layer
rootLayer.masksToBounds=true
previewLayer.frame = rootLayer.bounds
rootLayer.addSublayer(previewLayer)
previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill;
//Finalize the session
session.commitConfiguration()
//Begin the session
session.startRunning()
}
func captureOutput(_: AVCaptureOutput, didOutput: CMSampleBuffer, from:
AVCaptureConnection) {
print("Bingo")
}
}
预期输出:
Bingo
Bingo
Bingo
...
我已阅读:
StackOverflow: captureOutput not being called - 用户未正确声明 captureOutput 方法。
StackOverflow: AVCaptureVideoDataOutput captureOutput not being called - 用户根本没有声明 captureOutput 方法。
Apple - AVCaptureAudioDataOutputSampleBufferDelegate - Apple 关于委托(delegate)及其方法的文档 - 该方法与我声明的方法相匹配。
我在网上遇到的其他常见错误:
AVCaptureMetadataOutput
替换 AVCaptureAudioDataOutput
- 虽然我在 Apple 的文档中找不到这个,但我也试过这个,但类似的是,metadataOutput
函数永远不会被调用。我没有想法。我是否遗漏了一些明显的东西?
最佳答案
好吧,没有人回复我,但在玩弄它之后,我找到了为 Swift4 声明 captureOutput 方法的正确方法如下:
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
//Do your stuff here
}
不幸的是,这个在线文档很差。我猜你只需要完全正确 - 如果你拼错或错误命名变量,也不会抛出任何错误,因为它是一个可选函数。
关于ios - AVCaptureAudioDataOutputSampleBufferDelegate 未调用 captureOutput,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51573039/
我试图更好地理解 AVFoundation 框架以及各种 Core xxxx 框架,因此我决定尝试一个简单的视频捕获,看看是否可以将图像输出到 UI。我查看了 rosyWriter 代码和文档,但没有
我已经研究这个太久了。 我正在尝试获取 MacOS 网络摄像头数据并在网络摄像头输出的帧上运行 CIDetect。 我知道我需要: 连接 AVCaptureDevice (如输入)到AVCapture
请理解,我无法在此处上传整个代码。 我有 @interface BcsProcessor : NSObject {} 和 BcsProcessor 有 setupCaptureSession和 ca
我目前有一个自研框架(MySDK),以及一个使用MySDK的iOS应用程序(MyApp)。 在 MySDK 内部,我在 MySDK 中有一个类(Scanner),用于处理来自设备摄像头视频输出的图像。
我正在尝试实时捕获相机帧,以便使用 Firebase ML KIT 进行处理。我已成功显示相机 View ,但似乎无法调用 captureOutput 委托(delegate)函数。 P.s 我是 i
我有一个录制视频的应用,但我需要它向用户实时显示麦克风捕获的声音的音高水平。我已经能够使用 AVCaptureSession 成功地将音频和视频录制到 MP4 .但是,当我添加 AVCaptureAu
我目前正在尝试为我的应用程序实现摄像头实时馈送。我已经设置好了,但不知怎么的,它没有按预期工作。据我所知,captureOutput 应该在每次识别帧时执行,并且打印消息应该在控制台中输出,但不知何故
我正在尝试处理视频帧并从中提取集中的颜色。我使用的是 AVCaptureStillImageOutput,但每次我拍摄一帧进行处理时它都会发出快门声,所以我切换到 AVCaptureVideoData
首先,我知道很多人问过类似的问题 - 但我找不到任何类似的问题。 调用该接口(interface)时: - (void) captureOutput:(AVCaptureOutput *)captur
添加喜欢为我实时记录的每一帧添加过滤器并将过滤后的图像显示在 UIImageView 中,如果有人可以帮助它会很好。但从未调用 captureoutput,这是我的代码。 class Measurem
我正在使用 AVCaptureScreenInput 在 Mac 上尝试屏幕捕获,但从未调用 AVCaptureVideoDataOutput 委托(delegate) captureOutput,我
我有一个非常具体的问题,但希望有人可以帮助我。我正在使用 AVFoundation 创建具有实时预览功能的摄像机。我使用 AVCaptureVideoDataOutput 来获取各个帧,并使用 AVC
我正在尝试处理 AVCaptureSession 的每一帧并在 UIImageView 中预览过滤后的图像。它有效,但 UIImageView 中的图像出现旋转(和扭曲)。我一直试图在这里和在谷歌中找
我找到了使用二维码的教程 - here it is .使用这种方法,我可以从设备相机获取图像并在那里找到 QR 码。 问题是,当我更改 ViewController 甚至停止 AVCaptureSes
我想从 AVCaptureSession 的实时馈送中提取帧,我正在使用 Apple 的 AVCam 作为测试用例。这是 AVCam 的链接: https://developer.apple.com/
我正在构建一个 iOS 应用程序(我的第一个),它可以动态处理视频静止帧。为了深入研究这个问题,我遵循了example from the AV* documentation来自苹果公司。 该过程涉及设
目前,我有一个 AVCaptureSession 在我的 Swift 应用程序中运行,我有一个带有 CGRect 的 UIView,我想在相机源上四处移动。我一直在尝试通过更改 captureOutp
我开始开发 iOS 应用程序,这是我的第一篇 SO 帖子。我正在尝试实现一个 UI View ,它可以显示后置摄像头的预览视频并处理捕获的帧。我的预览层工作得很好,我可以在我的 UI View 中看到
我在下面使用的代码应该拍摄一张照片,然后将图像转换为 base64 以便将其发送到服务器。该代码可以拍摄照片,将其转换为base64,然后将其上传到我的服务器,但已停止工作。我曾尝试使用其他堆栈溢出帖
来源 所以,我这样设置了一个QTCaptureSession: //Setup Camera cameraSession = [[QTCaptureSession alloc] ini
我是一名优秀的程序员,十分优秀!