问题标签 [cmsamplebuffer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 从麦克风捕获音频时,我陷入内存泄漏或音频中的过度静态之间
我正在编写一个 iPhone 应用程序,我需要从麦克风捕获音频并将其流式传输到 AAC 格式的流媒体服务器。所以我首先捕获音频,然后使用
将音频转换为 AAC 的方法。
下面是代码
getAudioBufferDataFromCMSampleBufferRef 的代码如下
在上面的代码版本中,我收到 BAD_ACCESS 错误。相反,如果我删除了释放 blockBuffer 的代码,则会出现内存泄漏,并且应用程序最终会因内存压力而终止。
如果我不保留blockBuffer并编写代码
如下所示
在这个版本中,块缓冲区没有被保留,所以不需要释放它。但是现在我在音频中得到了可怕的静电。
有人知道如何解决这个问题吗?
谢谢, 厄兹古尔
swift - 从 Swift 中的 unSafeMutablePointer Int16 获取价值以用于音频数据
我正在努力将此代码转换为 Swift,这有助于我获取用于可视化的音频数据。我在 Obj C 中使用的运行良好的代码是:
在 Swift 中,我试图写的是这一部分:
但是,当我 println() sampleValue 在控制台中出现(不透明值)时。我不知道如何实际阅读 sampleValue。
我是尝试读取音频数据以进行可视化的新手。任何有关获取音频数据缓冲区的帮助都会有所帮助。谢谢你。
video-capture - 无法从捕获输出中获取 AudioStreamBasicDescription
我正在尝试访问 mSampleRate 和 mChannelsPerFrame 并将值分配给全局变量。
方法:
方法调用:
难道我做错了什么?有没有更好的方法从捕获输出样本缓冲区中获取 AudioStreamBasicDescription
编辑:
格式保存这些值:
ios - 设置 AVSampleBufferDisplayLayer 渲染样本缓冲区的速率
我正在使用 AVSampleBufferDisplayLayer 来显示通过网络连接以 h.264 格式出现的 CMSampleBuffers。视频播放流畅且工作正常,但我似乎无法控制帧速率。具体来说,如果我在 AVSampleBufferDisplayLayer 中以每秒 60 帧的速度排队,它会显示这 60 帧,即使视频是以 30 FPS 的速度录制的。
创建样本缓冲区时,可以通过将时间信息数组传递给 CMSampleBufferCreate 来设置演示时间戳(时间信息不存在于 h.264 流中,但可以计算或以容器格式传递)。我设置的演示时间戳相隔大约 0.033 秒,持续时间为 0.033,但显示层仍然每秒显示尽可能多的帧。
有两种方法可以在 AVSampleBufferDisplayLayer 上对缓冲区进行排队:每当缓冲区准备好时通过调用 -[AVSampleBufferDisplayLayer enqueueSampleBuffer:] 来“约束”,或者通过调用 -[AVSampleBufferDisplayLayer requestMediaDataWhenReadyOnQueue:usingBlock:] 并将缓冲区排队在该块中的“不受约束”。我已经尝试了这两种方法,但即使是第二种方法也尽可能快地显示缓冲区 - 例如,如果我在接收端排队了 300 帧,那么第一次执行上述方法中的块时,无论有多少,readyForMoreMediaData 都保持为真缓冲区被排入队列,并且它们都在很短的时间内显示出来。
如果在 CMSampleBuffer 上设置了 kCMSampleAttachmentKey_DisplayImmediately 附件,则此行为类似于人们所期望的,但是当前未设置(默认值为 false)。
我尝试设置图层 controlTimeBase,但似乎没有任何效果。我不知道要尝试的其他事情,也无法在网上找到示例。有谁知道如何控制 AVSampleBufferDisplayLayer 显示帧的帧速率?
ios - CMSampleBuffer 到 Swift 中的字节数组
我正在尝试为多点连接应用程序实现视频流。捕获的帧将由 VTCompressionSession 压缩,并且正在调用我的回调。
现在我的 CMSamplebuffer 包含一个 CMBlockBuffer ,我可以提取 NALU 等,就像这个答案中提到的如何使用 VideoToolbox 解压缩 H.264 视频流,但我正在寻找一种不同的方法来做到这一点。
是否可以将 CMSampleBuffer 的整个字节写入 UInt8 数组?我能够得到 CMSampleBuffer 的指针,但我怎样才能算出长度呢?
抱歉我的英语不好,如果有什么问题请告诉我,这是我的第一篇文章。谢谢你
ios - 在 Swift 中创建 CMSampleBuffer 的副本返回 OSStatus -12743(无效的媒体格式)
我正在尝试执行深度克隆CMSampleBuffer
来存储AVCaptureSession
. kCMSampleBufferError_InvalidMediaFormat
(OSStatus -12743)
运行该功能时收到错误消息CMSampleBufferCreateForImageBuffer
。我看不出我是如何CVImageBuffer
与CMSampleBuffer
格式描述不匹配的。有谁知道我哪里出错了?她是我的测试代码。
ios - 如何正确处理 CVPixelBuffer 中的像素?
简短的问题是:解决 a 中像素值的公式是什么CVPixelBuffer
?
我正在尝试将 a 转换为CVPixelBuffer
平面字节数组,并注意到一些奇怪的事情: TheCVPixelBuffer
是从 a 获得的CMSampleBuffer
。它的宽度和高度是852x640
像素。总和像素,考虑到每个像素的字节数545280
,这将需要字节数。2181120
4
现在第一个奇怪的事情是,每行CVPixelBuffer
返回相同的字节数,这对于像素3456
来说是足够的空间。864
这些额外的12
像素从何而来?如果最终图像中的一行只有852
像素宽,但实际上864
一行中有像素CVPixelBuffer
,我怎么知道需要复制哪些字节?或者这些字节中的哪些未使用?顺便说一句,它们是未使用的吗?
另一件事是报告的数据大小CVPixelBuffers
,即2211848
字节。3456
现在,如果我们将每行的字节数乘以640
行数,我们将得到2211840
字节数。再次,我们留下了8
额外的字节。这些8
字节是怎么回事?它们没有被使用吗?他们在最后吗?
欢迎任何对此事有所启发的建议,谢谢。
swift - didOutputSampleBuffer 丢帧
我正在编写一个用于长时间曝光图像拍摄的应用程序。
我曾经func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!)
得到一个CMSampleBuffer
用于应用CIFilter
using CILightenBlendMode
。
问题是,混合时间太长并且会导致帧丢失。我试图复制缓冲区:
但这并没有帮助,帧仍然下降。
完整代码:
ios - 我必须使用哪些 SampleBuffer 方法来测量帧速率?
我与 AvFoundation 合作。我需要从 ios 相机准确测量帧速率。
算法:
帧率= 1/(time(f2)-time(f1))
= __(每秒帧数);
其中 time(f2) - 这是第二帧的时间,而 (f1) - 这是第一帧的时间。如何使用 sampleBuffer?
objective-c - AVCaptureSession 像素格式对话
该文档指出,AVCaptureVideoDataOutput.availableVideoCVPixelFormatTypes
数组中的第一个元素是最有效的像素格式(即,这意味着无需进一步的转换工作)。
我打算使用Metal
它来操作CMSampleBuffer
视频输出。
底线,
设置捕获会话以将样本缓冲区作为 BGRA( kCVPixelFormatType_32BGRA
) 提供更有意义,还是 YCbCr( kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
) 到 RGB 转换在使用金属时提供更好的性能?