在我的应用中,我使用
将媒体捕获为帧- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
委托,我使用MPMoviePlayerController录制并播放录制的文件。现在我的问题是,我想将这些缓冲区写入套接字并发送到服务器而不是写入文件。我需要做出哪些改变?
感谢您的帮助。
答案 0 :(得分:0)
看来你的问题包含两部分:
为了逐帧捕捉,我使用了Apple的这个片段:(把它放在你提到的captureOutput方法中:
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(imageBuffer, 0);
uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
CGImageRef newImage = CGBitmapContextCreateImage(newContext);
CGContextRelease(newContext);
CGColorSpaceRelease(colorSpace);
// NSImage *image = [UIImage imageWithCGImage:newImage];
// self.imgData = UIImageJPEGRepresentation(image , 1.0); //convert to NSData to send
CGImageRelease(newImage);
CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
对于网络套接字通信,您可以使用CocoaAsyncSocket。如果您不需要套接字级别,也可以使用NSStream。