如何将捕获的帧写入套接字?

时间:2012-09-25 10:08:41

标签: iphone ios cocoa-touch video-capture

在我的应用中,我使用

将媒体捕获为帧
- (void)captureOutput:(AVCaptureOutput *)captureOutput 
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
       fromConnection:(AVCaptureConnection *)connection 

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

感谢您的帮助。

1 个答案:

答案 0 :(得分: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