1

在我的应用程序中,我使用

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

委托,我已经使用 MPMoviePlayerController 录制并播放了录制的文件。现在我的问题是,我想将这些缓冲区写入套接字并发送到服务器而不是写入文件。我需要做出什么样的改变?

感谢您的帮助。

4

1 回答 1

0

您的问题似乎包含两个部分:

  1. 为了逐帧捕获,我使用了 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);
    
  2. 对于网络套接字通信,您可以使用CocoaAsyncSocket。如果您不需要套接字级别,也可以使用NSStream

于 2012-09-25T13:30:56.137 回答