потоковое изображение через Bonjour между двумя устройствами iOS - PullRequest
4 голосов
/ 02 сентября 2011

Моя цель - потоковая передача изображений, снятых AVCpatureInput, с одного устройства iOS на другое через Bonjour.

Вот мой текущий метод:

1) Захват кадра с видеовхода

- (void)captureOutput:(AVCaptureOutput *)captureOutput 
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
   fromConnection:(AVCaptureConnection *)connection 
{ 
    /*code to convert sampleBuffer into UIImage */
    NSData * imageData = UIImageJPEGRepresentation(image,1.0);
    [connection sendImage:image];
}

2) Передача по TCP-соединению (от http://mobileorchard.com/tutorial-networking-and-bonjour-on-iphone/)

// Send raw image over network
- (void)sendRawImagePacket:(UIImage *)image {
// Encode packet
NSData * imageData = UIImageJPEGRepresentation(image, 1.0);

NSData * rawPacket = [NSKeyedArchiver archivedDataWithRootObject:imageData];

// Write header: length of raw packet
int packetLength = [rawPacket length];

[outgoingDataBuffer appendBytes:&packetLength length:sizeof(int)];

[outgoingDataBuffer appendData:rawPacket];

// Try to write to stream
[self writeOutgoingBufferToStream];
}

3) Считайте данные и преобразуйте их обратно в изображение для отображения на UIImageView

* 1013 принимающего устройства.*

Однако, когда соединение становится прерывистым, UIImage выдает ошибку, что не может отрисовать JPEG.

Как мне передавать изображения через wifi?

Это нормально, если некоторые кадры пропускаются, мне нужен способ сказать UIImage, чтобы пропустить этот "пакет" неверных данных.

Спасибо!

1 Ответ

1 голос
/ 02 сентября 2011

UIImage не соответствует NSCoding -> NSKeyedArchiver завершается ошибкой.

Вы должны будете использовать UIImagePNGRepresentation (), чтобы получить данные изображения. Или используйте UIImageJPEGRepresentation () для сжатых данных.

...