1

私のアプリでは、を使用してメディアをフレームとしてキャプチャしています

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

デリゲート、MPMoviePlayerControllerを使用して記録されたファイルを記録および再生しました。今私の質問は、ファイルに書き込む代わりに、それらのバッファをソケットに書き込んでサーバーに送信したいということです。どのような変更を加える必要がありますか?

あなたの助けに感謝します。

4

1 に答える 1

0

あなたの質問には2つの部分が含まれているようでした:

  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 に答える