- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 CMSampleBuffer
访问样本以进行进一步处理(主要是视觉处理),这是我的代码:
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
var audioBufferList = AudioBufferList()
var blockBuffer : CMBlockBuffer?
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, nil, &audioBufferList, MemoryLayout<AudioBufferList>.size, nil, nil, 0, &blockBuffer)
let buffers = UnsafeBufferPointer<AudioBuffer>(start: &audioBufferList.mBuffers, count: Int(audioBufferList.mNumberBuffers))
var data = audioBufferList.mBuffers.mData
let pointer = data?.assumingMemoryBound(to: Float.self)
let floatPointer = data?.bindMemory(to: Float.self, capacity: 1024)
let floatBuffer = UnsafeBufferPointer(start: floatPointer, count: 1024)
let outputArray = Array(floatBuffer)
print(outputArray[0..<20])
}
我得到了结果,但它们看起来像是(对我而言)一种奇怪的形式,就像这样(打印语句的输出):
[-snan(0x1dff94), -nan(0x15ffba), 2.93871626e-39, 2.29594486e-39, 8.26537682e-40, -nan(0x1affef), -nan(0xeffe0), 2.84690739e-39, 4.95919386e-39, 4.86737658e-39, 1.19389788e-39, -nan(0x8ffe4), -snan(0xaffa6), -3.29645785e+38, -snan(0x17ff85), -nan(0x5ffae), 2.66320417e-39, 2.11228928e-39, -nan(0x2fff6), -nan(0x19ffd6)]
[-2.45903224e+38, -3.13694095e+38, -snan(0xdff85), -nan(0xbffb4), -snan(0x11ffba), -2.83122967e+38, -2.41915276e+38, -2.67170487e+38, -2.83122724e+38, -2.73817357e+38, -2.39257084e+38, -1.50864781e+38, -1.34249056e+38, -1.71464408e+38, -2.53878186e+38, -2.48561761e+38, -2.64512051e+38, -3.19011393e+38, -snan(0x12ff96), -snan(0x1bffb7)]
问题是我如何以“正常”AVAudioPCMBuffer
的方式访问CMSampleBuffer
样本?
FloatChannelData
或者我在这里做错了什么?
最佳答案
当我创建和 AVCaptureAudioDataOutput
时,我得到的样本是 Int16
(不确定您是否可以配置Float
s),当打印出你修改后的代码时,它们非常有意义:
let intPointer = data?.bindMemory(to: Int16.self, capacity: 1024)
音频 Int16
是否在任何地方记录?如果不是,您始终可以通过查看其 AudioStreamBasicDescription
let asbd = CMAudioFormatDescriptionGetStreamBasicDescription(CMSampleBufferGetFormatDescription(sampleBuffer)!)!.pointee
或者开始使用 swift 4 以获得稍微更好的可读性
let asbd = sampleBuffer.formatDescription!.audioStreamBasicDescription!.pointee
关于swift - CMSampleBuffer 样本值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51166673/
在这里,我尝试从照片库中选择视频并将其作为samplebuffer逐帧读取,以便稍后可以裁剪或旋转。但问题是CMSampleBuffer默认旋转。我用于初始化的变量是 var asset:AVAss
我正在尝试从 CMSampleBuffer 访问样本以进行进一步处理(主要是视觉处理),这是我的代码: func captureOutput(_ output: AVCaptureOutput, d
这可能是个愚蠢的问题,但我才刚刚开始了解媒体格式和 AVFoundation,所以请多多包涵。 我一直在尝试弄清楚 AVCaptureVideoDataOutput 中的 CMSampleBuffer
我通过以下方式从我的相机获取帧: func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffe
我们的应用程序使用 AVFoundation 来捕获视频,并使用其样本缓冲区显示、操作和导出视频。我试图了解 CMSampleBufferGetPresentationTimeStamp(_:) CM
我在从 AVCaptureSession 相机中的 CMSampleBuffer 释放内存时遇到问题。这是我设置捕获 session 的代码。如果我处置 imageDataSampleBuffer,应
我正在尝试获取样本缓冲区中的图像元数据,以下是代码片段: stillImageOutput.CaptureStillImageAsynchronously(requiredConnection,(CM
我想通过网络连接发送视频流的帧,所以我实现了 AVCaptureVideoDataOutputSampleBufferDelegate 函数: func captureOutput(_ output:
我想修改CMSampleBuffer的内容,然后用AVAssetWriter/AVAssetWriterInput写入文件。 我这样做的方法是创建一个 Core Graphics 位图上下文,然后在其
使用AVCaptureAudioDataOutput时,CMSampleBuffer中存储的数据是什么?它通过委托(delegate)方法 –captureOutput:didOutputSample
我使用 AVAssetWriter 和 CMSampleBuffer 数据(来自视频、音频输入)录制视频(.mp4 文件)。 在录制时我想处理帧,我正在将 CMSampleBuffer 转换为 CII
我在 iOS 中为群组创建了一个视频聊天应用程序。我一直在寻找一些方法来分别控制不同参与者的音量。我找到了使用 RemoteAudioTrack 中的 isPlaybackEnabled 静音和取消静
我正在尝试创建由 AVCaptureAudioDataOutputSampleBufferDelegate 中的 captureOutput 返回的 CMSampleBuffer 副本. 我遇到的问题
我正在尝试创建 CMSampleBuffer 的副本,由 AVCaptureVideoDataOutputSampleBufferDelegate 中的 captureOutput 返回。 由于 CM
我从 ARSessionDelegate 得到一个 CVPixelBuffer: func session(_ session: ARSession, didUpdate frame: ARFrame
我试图从使用 AVFoundation 捕获的图像中获取曝光时间.当我按照 2010 年的 WWDC 指令从 CMSampleBuffer 检索有用的图像元数据时像这样: -(void)capture
我有一个附加到 AVPlayerItem 的 AudioTapProcessor。 这将调用static void tap_ProcessCallback(MTAudioProcessingTapRe
我想使用 GPUImageView 输出从 AVCaptureVideoDataOutputSampleBufferDelegate 接收到的 CMSampleBuffer。所以,基本上,我不希望 G
我正在使用同时录制音频和视频的外部摄像头。 我的应用程序接收具有以下结构的 AAC 格式的音频: struct AudioPacket { let timestamp: TimeInterval
我正在使用框架 (MoodMe) 来检测 iPhone 相机上的人脸,我需要将图像或帧传递给 MoodMe 实例。 我已将相机输出转换为 UIImage,但框架未检测到任何人脸。 (我觉得) 所以我想
我是一名优秀的程序员,十分优秀!