将CMSampleBuffer转换为UIImage
我正在尝试将SampleBuffer转换为UIImage,并在带有ColorsPaceGray的图像视图中显示它.但它显示为以下图像.我认为转换存在问题.如何转换cmsamplebuffer? func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) { print("buffered") let imageBuffer: CVImageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)! CVPixelBufferLockBaseAddress(imageBuffer, CVPixelBufferLockFlags(rawValue: 0)) let width: Int = CVPixelBuff
2 2023-11-03
编程技术问答社区
从CMSampleBuffer播放音频
我为iOS组创建了一个视频聊天应用程序.我一直在寻找一些分别控制不同参与者的音频量的方法.我找到了使用RemoteAudioTrack中的isPlaybackEnabled静音和取消静音的方法,但不能控制音量. 我还认为是否可以在AVAudioPlayer中使用它.我找到了addSink.这就是我从这里尝试的. class Audio: NSObject, AudioSink { var a = 1 func renderSample(_ audioSample: CMSampleBuffer!) { print("audio found", a) a += 1 var audioBufferList = AudioBufferList() var data = Data() var blockBuffer : CMBlockBuffer? CMSampleBuff
10 2023-10-28
编程技术问答社区
在没有预览窗口的情况下使用AVCaptureVideoDataOutputSampleBufferDelegate
我正在研究一个基于Swift的MacOS应用程序,我需要在其中捕获视频输入,但不在屏幕上显示它...而不是显示视频,我想发送缓冲的数据以处理其他地方,并且最终在SceneKit场景中显示在对象上. 我有一个具有prepareCamera方法的CameraInput类: fileprivate func prepareCamera() { self.videoSession = AVCaptureSession() self.videoSession.sessionPreset = AVCaptureSession.Preset.photo if let devices = AVCaptureDevice.devices() as? [AVCaptureDevice] { for device in devices { if device.hasMediaType(
2 2023-10-08
编程技术问答社区
从CMSampleBuffer中提取数据,以创建一个深度拷贝
我正在尝试创建cmsamplebuffer的副本,如avcaptureVideDataTaUtputsamplesbufferdelegate中的captureOutput返回. 由于cmsamplebuffers来自(15)个缓冲区的预关注池,因此,如果我附加了对它们的引用,则无法回忆.这会导致所有其余帧被删除. 为了保持最佳性能,一些样本缓冲区直接参考内存库,这些存储器可能需要由设备系统和其他捕获输入重复使用.对于未压缩设备的本机捕获通常是这种情况,在该捕获中,记忆块尽可能少.如果多个示例缓冲区参考此类内存库太长,则输入将不再能够将新样本复制到存储器中,并且这些样本将被丢弃. 如果您的应用程序通过将提供的CMMAMPLEBUFFERREF对象保留太长而导致样品删除,但是它需要长时间访问示例数据,请考虑将数据复制到新的缓冲区中,然后释放示例缓冲区(如果以前保留),以便可以重复使用它的内存. 显然我必须复制cmsamplebuffer,但是cmmsamplebuf
10 2023-10-07
编程技术问答社区
如何在Swift中把CMSampleBuffer转换为数据?
我需要将CMSampleBuffer转换为Data格式.我正在使用一个第三方框架进行音频相关任务.该框架为我提供了CMSampleBuffer对象中的流(即实时音频)音频. 这样: func didAudioStreaming(audioSample: CMSampleBuffer!) { //Here I need to conver this to Data format. //Because I am using GRPC framework for Audio Recognization, } 请为我提供将CMSampleBuffer转换为Data的步骤. fyi let formatDesc:CMFormatDescription? = CMSampleBufferGetFormatDescription(audioSample)
12 2023-10-07
编程技术问答社区
CIContext render: toCVPixelBuffer: bounds: colorSpace: 函数对有alpha通道的图像不起作用
我正在尝试在我使用Avfoundation的AvCaptureVideDataOutput录制的视频中添加水印/徽标.我遇到的问题是,UIImage的透明部分曾经是黑色的,曾经写在视频中. m做错了吗? CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(buffer); .... .... CIImage *image = [[CIImage alloc] initWithData:logoData]; CVPixelBufferLockBaseAddress( pixelBuffer, 0 ); CIContext *ciContext = [CIContext contextWithOptions:nil]; CGColorSpaceRef cSpace = CGColorSpaceCreateDeviceRGB(); [ciContext render:image toCVPixel
28 2023-05-05
编程技术问答社区
如何将CVPixelBuffer/CVImageBuffer转换为数据?
我的相机应用程序捕获照片,以某种方式增强照片并保存. 为此,我以cvpixelbuffer的形式从相机中获取输入图像(包裹在cmsamplebuffer中).我对像素缓冲区进行了一些修改,然后我想将其转换为数据对象.我该怎么做? 请注意,我不想将像素缓冲区/映像缓冲区转换为UIImage或CGimage,因为它们没有元数据(例如Exif).我需要一个数据对象.如何从cvpixelbuffer/cvimagebuffer中获得一个? ps:我尝试调用AVCapturePhotoOutput.jpegPhotoDataRepresentation(),但这未能说"不是JPEG样本缓冲区".这是有道理的,因为cmsamplebuffer包含一个像素缓冲区(位图),而不是JPEG. 解决方案 正如您所说的那样,您可以获得CMSampleBuffer,然后可以使用 获得它 NSData *myata = [AVCaptureStillImageOutput jpegS
28 2023-04-28
编程技术问答社区
用AVFoundation(OSX)向视频添加滤镜--如何将生成的图像写回AVWriter?
设置场景 我正在开发一个视频处理应用程序,该应用程序从命令行运行以阅读,处理然后导出视频.我正在使用4个曲目. 我将很多剪辑附加到一个曲目中以制作一个视频.让我们称其为ugcvideopomposition. 带有alpha的剪辑,该剪辑位于第二个轨道并使用图层说明中,将Composos in Export设置为在UGCVIDEOPOMPOSION的顶部播放. 音乐音轨. ugcvideopomposition的音轨,其中包含附加到单个轨道的剪辑中的音频. 我有所有工作,可以使用avexportsession正确地将其综合并正确导出. 问题 我现在想做的是将过滤器和梯度应用于ugcvideopomposition. 到目前为止,我的研究表明,这是通过使用Avreader和Avwriter来完成的,提取CIIMAGE,用过滤器进行操作,然后将其编写出来. 我还没有使用上述所有功能,但是我设法使用AssetReader和AssetWriter将
20 2023-03-16
编程技术问答社区
在Swift中创建CMSampleBuffer的副本会返回OSStatus -12743(无效的媒体格式)。
我正在尝试执行CMSampleBuffer的深克隆来存储AVCaptureSession的输出.运行函数CMSampleBufferCreateForImageBuffer时,我将收到错误kCMSampleBufferError_InvalidMediaFormat (OSStatus -12743).我看不到我如何不匹配CVImageBuffer和CMSampleBuffer格式描述.有人知道我出了什么问题吗?她是我的测试代码. func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) { let allocator: CFAllocator = CFAllocatorGetDefault().takeRetainedVal
28 2023-01-20
编程技术问答社区
用RPScreenRecorder开始捕捉保存屏幕录像
我正在尝试使用rpscreenrecorder.shared().startcapture将屏幕记录保存到firebase.我知道如何将视频保存在Avcapture中,但无法弄清楚如何处理CMSampleBuffer以创建文件以保存到Firebase.请帮助我在任何地方都找不到有关此文件的文档,以下是方法: let recorder = RPScreenRecorder.shared() if #available(iOS 11.0, *) { recorder.startCapture(handler: { (videoBuffer, bufferType, error) in print(videoBuffer) print(bufferType) }, completionHandler: { (error) in })
12 2022-12-09
编程技术问答社区
设置AVSampleBufferDisplayLayer渲染采样缓冲区的速率
我正在使用 AVSampleBufferDisplayLayer 来显示来自网络连接的 h.264 格式的 CMSampleBuffers.视频播放流畅且工作正常,但我似乎无法控制帧速率.具体来说,如果我在 AVSampleBufferDisplayLayer 中以每秒 60 帧的速度排队,它会显示这 60 帧,即使视频是以 30 FPS 的速度录制的. 创建样本缓冲区时,可以通过将计时信息数组传递给 CMSampleBufferCreate 来设置演示时间戳(计时信息不存在于 h.264 流中,但可以计算或以容器格式传递).我设置的演示时间戳相隔大约 0.033 秒,持续时间为 0.033,但显示层仍然每秒显示尽可能多的帧. 有两种方法可以在 AVSampleBufferDisplayLayer 上将缓冲区排入队列:当缓冲区准备好时,通过调用 -[AVSampleBufferDisplayLayer enqueueSampleBuffer:] 来“约束",或者通过调用 -[
2134 2022-07-17
编程技术问答社区