草庐IT

CMSampleBuffer

全部标签

ios - 从麦克风捕获音频时,我陷入了内存泄漏或音频中的过多静电之间

我正在编写一个iPhone应用程序,我需要从麦克风中捕获音频并将其以AAC格式流式传输到流媒体服务器。所以我首先捕获音频然后使用AudioConverterFillComplexBuffer将音频转换为AAC的方法。下面是代码-(void)captureOutput:(AVCaptureOutput*)captureOutputdidOutputSampleBuffer:(CMSampleBufferRef)sampleBufferfromConnection:(AVCaptureConnection*)connection{NSArray*audioChannels=connecti

ios - 设置 AVSampleBufferDisplayLayer 渲染样本缓冲区的速率

我正在使用AVSampleBufferDisplayLayer来显示通过网络连接以h.264格式传输的CMSampleBuffer。视频播放流畅且工作正常,但我似乎无法控制帧速率。具体来说,如果我在AVSampleBufferDisplayLayer中每秒排队60帧,它会显示这60帧,即使视频是以30FPS录制的。创建样本缓冲区时,可以通过将计时信息数组传递给CMSampleBufferCreate来设置呈现时间戳(计时信息不存在于h.264流中,但可以计算或以容器格式传递)。我设置的呈现时间戳相隔约0.033秒,持续时间为0.033,但显示层仍会显示尽可能多的每秒帧数。有两种方法可以

ios - CMSampleBuffer 中有多少帧?

这可能是个愚蠢的问题,但我才刚刚开始了解媒体格式和AVFoundation,所以请多多包涵。我一直在尝试弄清楚AVCaptureVideoDataOutput中的CMSampleBuffer是否可以包含多个帧。从文档来看,这似乎是可能的,但是,我看到的大多数示例代码似乎都与CMSampleBuffer有关,就好像它是一个帧一样。我只是误会了吗?如果每个缓冲区可以有多个帧,是否可以获取各个帧并确定它是否是关键帧?谢谢 最佳答案 的确,一个CMSampleBuffer可以包含多个样本,其中一个样本是任意数据。在AVFoundation中

无法将cmsamplebuffer附加到avassertWriterInput(错误-12780)

我正在使用FFMPEG手动解码H264RTSP流,并尝试使用未压缩的帧来使用AVAssertWriter和AVAssertWriterInput.打电话时我会遇到以下错误AVAssetWriterInputappendBuffer-ErrorDomain=AVFoundationErrorDomainCode=-11800"Theoperationcouldnotbecompleted"UserInfo={NSUnderlyingError=0x170059530{ErrorDomain=NSOSStatusErrorDomainCode=-12780"(null)"},NSLocalized

ios - 将 AudioBufferList 转换为 CMSampleBuffer 会产生意外结果

我正在尝试将从音频单元获取的AudioBufferList转换为可以传递给AVAssetWriter的CMSampleBuffer保存来自麦克风的音频。此转换有效,因为我为执行转换所做的调用不会失败,但记录最终会失败,而且我在日志中看到一些输出似乎值得关注。我使用的代码如下所示:-(void)handleAudioSamples:(AudioBufferList*)samplesnumSamples:(UInt32)numSampleshostTime:(UInt64)hostTime{//CreateaCMSampleBufferReffromthelistofsamples,whi

ios - 使用来自原始 PCM 流的 CMSampleTimingInfo、CMSampleBuffer 和 AudioBufferList

我正在从Google的WebRTCC++引用实现(一个插入到VoEBaseImpl::GetPlayoutData中的Hook)接收原始PCM流。音频似乎是线性PCM,符号为int16,但在使用AssetWriter录制时,它会保存到音频文件中,高度失真且音调更高。我假设这是输入参数某处的错误,最有可能是关于将stereo-int16转换为AudioBufferList,然后再转换为CMSampleBuffer。下面的代码有什么问题吗?voidRecorderImpl::RenderAudioFrame(void*audio_data,size_tnumber_of_frames,in

ios - 修改 CMSampleBuffer 内容的最有效方法

我想修改CMSampleBuffer的内容,然后用AVAssetWriter/AVAssetWriterInput写入文件。我这样做的方法是创建一个CoreGraphics位图上下文,然后在其中绘图,但速度太慢了。具体来说,我需要将图像绘制到缓冲区中。那么,是否可以就如何更有效地执行此操作提供某种提示或建议?我想过用OpenGL来实现,即首先从CMSampleBuffer创建一个纹理A。然后将根据我要绘制的图像创建的纹理B渲染到纹理A中,然后从OpenGL检索支持纹理A的数据,最后将该数据交给AVAssetWriter/AVAssetWriterInput。但是文档说将纹理数据从GPU

ios - 在 Swift 2.0 中创建 CMSampleBuffer 的副本

以前有人问过这个问题,但自从有人问起之后,Swift中肯定发生了一些变化。我正在尝试存储从AVCaptureSession返回的CMSampleBuffer对象,以便稍后处理。经过一些实验,我发现AVCaptureSession必须重用其CMSampleBuffer引用。当我尝试保持超过15个时,session挂起。所以我想我会制作样本缓冲区的副本。但我似乎无法让它发挥作用。这是我写的:varallocator:Unmanaged!=CFAllocatorGetDefault()varbufferCopy:UnsafeMutablePointerleterr=CMSampleBuffe

ios - 以任意角度旋转 CMSampleBuffer 并在 swift 3 中附加到 AVAssetWriterInput

我将示例缓冲区转换为CGContext。然后我将转换应用到上下文并从中创建一个CIImage,然后显示在UIImageView中。同时我想将其附加到AVAssetWriterInput以创建这些转换的电影。到目前为止,我对上下文应用的转换没有任何效果。当我在ImageView中显示所谓的转换图像时。它看起来完全一样。更新:我设法将示例缓冲区记录到视频文件中(尽管由于方向错误,它仍然被拉伸(stretch))。我以这段代码为基础http://geek-is-stupid.github.io/blog/2017/04/13/how-to-record-detect-face-overlay

ios - Swift - 从 CMSampleBuffer 获取 kCMSampleBufferAttachmentKey_DroppedFrameReason

我想了解为什么我的AVCaptureOutput丢帧。在captureOutput(_output:AVCaptureOutput,didDropsampleBuffer:CMSampleBuffer,fromconnection:AVCaptureConnection)委托(delegate)方法中,我得到一个CMSampleBuffer应该包含一个解释框架原因的附件已删除(doc)原因预计是这些CFString之一:kCMSampleBufferDroppedFrameReason_FrameWasLate//"FrameWasLate"kCMSampleBufferDropped