gpt4 book ai didi

ios - 如何从 CMSampleBufferRef 获取字节,通过网络发送

转载 作者:IT王子 更新时间:2023-10-29 07:54:04 25 4
gpt4 key购买 nike

我正在使用 AVFoundation 框架捕获视频。在 Apple 文档的帮助下 http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/03_MediaCapture.html%23//apple_ref/doc/uid/TP40010188-CH5-SW2

现在我做了以下事情

1.创建videoCaptureDevice
2.创建AVCaptureDeviceInput并设置videoCaptureDevice
3.创建AVCaptureVideoDataOutput并实现Delegate
4.创建AVCaptureSession - 将输入设置为AVCaptureDeviceInput并将输出设置为AVCaptureVideoDataOutput

5.在AVCaptureVideoDataOutput委托(delegate)方法中

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection

我得到 CMSamplebuffer 并转换为 UIImage 并测试使用

打印 UIImageview
[self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];

一切顺利到此为止.......

我的问题是,我需要通过 UDP 套接字发送视频帧。尽管我试过以下一个是坏主意,UIImage 到 NSData 并通过 UDP Pocket 发送。 BUt 在视频处理中有如此延迟。主要是因为 UIImage 到 NSDate 的问题

所以请给我解决我的问题

1)有什么方法可以将 CMSampleBUffer 或 CVImageBuffer 转换为 NSData ??
2)像Audio Queue Service和Queue for Video一样存储UIImage,做UIImage到NSDate 并发送 ???

如果我落后于错误的算法,请按照写入方向引导我

提前致谢

最佳答案

这是获取缓冲区的代码。此代码假定平面图像(例如 BGRA)。

NSData* imageToBuffer( CMSampleBufferRef source) {
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(source);
CVPixelBufferLockBaseAddress(imageBuffer,0);

size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
void *src_buff = CVPixelBufferGetBaseAddress(imageBuffer);

NSData *data = [NSData dataWithBytes:src_buff length:bytesPerRow * height];

CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
return [data autorelease];
}

一种更有效的方法是使用 NSMutableData 或缓冲池。

假设有 3 个颜色 channel ,每秒发送 480x360 图像将需要 4.1Mbps 连接。

关于ios - 如何从 CMSampleBufferRef 获取字节,通过网络发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6189409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com